AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBgrid;überprüfen des Fieldinhalt vor dem Übernahme
Thema durchsuchen
Ansicht
Themen-Optionen

DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

Ein Thema von khalilazzz · begonnen am 7. Feb 2005 · letzter Beitrag vom 7. Feb 2005
Antwort Antwort
khalilazzz

Registriert seit: 1. Feb 2005
59 Beiträge
 
#1

DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

  Alt 7. Feb 2005, 10:08
hallo zusammen
Ich habe so ein aufgabe,die sich mit dem DBgrid adotabel,dbsource und accessdatenbank beschäftigt.
ich habe folgendes Problem:
bevor die eingebeben Daten durch das drücken der Retuntaste in dem datenbank aufgenommen wird,wird zusert geprüft,ob dieses Field des DBGrids daten enthält,damit man einen leeres Feld in dem Datenbank vermeiden kann.
bei dem unten eingegeben Code,scheint alles korrekt zu sein.leider ist die abfrage (trim(f.text)<>'') immer true ist,obwohl drin in dem Feld nicht eingegeben worden ist,da der inhalt des f.text entspricht den Ihahlt in dem datenbank.
ich habe andere methoden probiert(f.displaytext, f.value) leider hat es nicht geklappt
hat jemand so einen Idee wie man so was lösen kanm
danke für eure Hilfe.

Code:
procedure TForm.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
 f:TField;
begin
  f:=DBGrid1.SelectedField;
 if(trim(f.text) <>'') and (key=VK_Return) then
   key:=VK_Down
else
  key=0;
 end;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

  Alt 7. Feb 2005, 10:34
Hai khalilazzz,

bei den meisten DBs ist es so das ein (String)Feld das noch keinen Inhalt hat dieses den "Wert" Null besitzt. Du solltest also noch zusätzlich prüfen ob das Feld NULL ist.

Code:
procedure TForm.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
 f:TField;
begin
  f:=DBGrid1.SelectedField;
 if ((trim(f.text) <>'') OR (Not (f.IsNull)) and (key=VK_Return) then
   key:=VK_Down
else
  key=0;
 end;
[/quote]
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

  Alt 7. Feb 2005, 10:39
Moin khalilazzz,

ich würde die Überprüfung nicht im Grid1KeyDown-Ereignis durchführen. Besser wäre es meines Erachtens im BeforePost der zugehörigen Table bzw Query. Und dann solltest Du den Wert des von Query.Field überprüfen. (z.B. mit IsNull). Falls Du leere zeichenketten auch ausschließen willst geht es auch so (gefunden ibn der OH!),mußt es nur sinngemäß auf ein TStringField anwenden:
Delphi-Quellcode:
procedure TForm1.Table1BeforePost(DataSet: TDataSet);

begin
if DBEdit1.Text = 'then
  Abort;

end;
  Mit Zitat antworten Zitat
khalilazzz

Registriert seit: 1. Feb 2005
59 Beiträge
 
#4

Re: DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

  Alt 7. Feb 2005, 10:43
hi
danke für deinen antwort
ich habe damit auch probiert,leider klappt es nicht.das problem liegt drin,dass die abfrage wird in dem datenbank durchgeführt,und nicht bezogen auf dem Feld des DBgrides ist, so dass der inhalt dieses Feld in dem datenbank (nicht in dem DBgrid) kein null ist und damit ist diese abfrag (if not (f.isNull))immer erfüllt,so dass bei dem drücken des Eingabe taste einen Null in dem Datenbank aufgenommen wird,was zu einem exception führt.
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#5

Re: DBgrid;überprüfen des Fieldinhalt vor dem Übernahme

  Alt 7. Feb 2005, 11:05
Hallo khalilazzz,

wie r_kerber geschrieben hat, ist Dein ursprünglicher Code im OnKeyDown-Event fehl am Platz (der ursprüngliche Code gibt für mich ehrlich gesagt gar keinen Sinn).

Was Du tun musst, ist, im OnBeforePost-Event Dein Feld zu prüfen:
Delphi-Quellcode:
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
  // (Angenommen, das zu prüfende Feld heißt Feld1)
  If Table1Feld1.IsNull or (Table1Feld1.AsString = '') then abort // bzw. Fehlermeldung ausgeben
end
Damit prüfst Du, ob das Feld NULL ist oder einen leeren String hat.
Wenn Du die Felder nicht persistent hinzufügen willst (über den Feldeditor), musst Du mit Table1.Fields[n] arbeiten (evtl. in einer Schleife abarbeiten).
Diese Abfragen prüfen den aktuellen Wert in Deinen Komponenten, nicht den Wert in der DB.
Vielleicht kommt Dein Problem daher, dass TField.Text nicht den Inhalt des Feldes, sondern den Text angibt, der in einem Steuerelement angezeigt wird (z.B. wird bei einem Blob-Feld nicht der Inhalt angezeigt, sondern "(blob)" oder "(BLOB)"). Ich weiß nicht genau, was bei einem leeren Feld angezeigt wird...

Hoffe das hilft Dir weiter
Urs
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz