Wie auf leeres Datum prüfen? [gelöst]

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Wie auf leeres Datum prüfen? [gelöst]

Beitrag von and4more »

Hallo liebes Forum,

habe folgendes Problem: Die Firebird-Datenbank (Version 2,5) die ich abfrage hat auch Datensätze wo das Datum leer sein kann. Wenn ich im Code

Code: Alles auswählen

 if (SQLQuery2.FieldByName('DATUM').AsDateTime<>null) then ... 
einfüge läuft die Compilierung durch, ich erhalte allerdings im Formular das Datum 30.12.1989 obwohl das betreffende Datenbankfeld leer ist. Wo kommt dieses Datum her? Wie kann man sowas vermeiden? Muss ich die Abfrage ändern? Und wenn ja, wie?
Zuletzt geändert von and4more am Fr 27. Nov 2015, 11:24, insgesamt 1-mal geändert.
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Re: Wie auf leeres Datum prüfen?

Beitrag von and4more »

...Vielleicht noch erwähnenswert ist die Behandlung des Datums im Code, nämlich wenn die Daten auf das Formular übertragen werden:

Code: Alles auswählen

 
      tmpDate:=SQLQuery2.FieldByName('DATUM').AsDateTime;
      DecodeDate(tmpDate,tmpjj,tmpmm,tmptt);
      FrmMain.EdLabDatTT.Text:=IntToStr(tmptt);
      FrmMain.EdLabDatMM.Text:=IntToStr(tmpmm);
      FrmMain.EdLabDatJJJJ.Text:=IntToStr(tmpjj);
 
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: Wie auf leeres Datum prüfen?

Beitrag von TBug »

Wenn das Datumsfeld einen NULL-Wert hat, dann gibt "SQLQuery2.FieldByName('DATUM').AsDateTime" 0 zurück.
Und der Wert 0 entspricht dem 30.12.1989.


.

and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Re: Wie auf leeres Datum prüfen?

Beitrag von and4more »

...hmmm, allerdings gibt's ne Fehlermeldung wenn ich in der if-Abfrage auf den Wert '0' prüfe, da dies ja kein korrektes Datum ist. Also gibt es eine Möglichkeit das irgendwie abzufangen?
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Wie auf leeres Datum prüfen?

Beitrag von wp_xyz »

Code: Alles auswählen

 if (SQLQuery2.FieldByName('DATUM').IsNull then ...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Wie auf leeres Datum prüfen?

Beitrag von af0815 »

NULL ist ein eigener Zustand und entspricht nicht 0 (Ziffer Null) in der Datenbank. Wenn man das NULL nicht haben, so sollte man schon beim Design das einplanen und ein Constrain mit not NULL bei der Tabellenerstellung setzen. Damitmuss man sich aber bewusst sein, das man die Spalte immer mit Daten befüllen muß. Entweder durch ein default, oder durchs Programm.

Es kann sein, das die Datenbankschicht, bei NULL eventuell 0 rückliefert. Deshalb muß man mit der Funktion IsNull der Zustand extra abgefragt werden. Ein einfacher Vergleicht reicht nicht, unbedingt mit IsNull abfragen.

Mir kommt immer besonders kurios von, wenn ich einen boolschen Wert habe und für den 3 Werte gedanklich einplanen muß - true, false, NULL. :shock:

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

and4more
Beiträge: 207
Registriert: Do 15. Nov 2012, 19:13
OS, Lazarus, FPC: Windows 10, Manjaro Linux, Lazarus 1.6.4 (32/64 Bit)
CPU-Target: 32 Bit / 64 Bit

Re: Wie auf leeres Datum prüfen?

Beitrag von and4more »

Vielen Dank an Alle, das hat mir wirklich sehr geholfen, ich hatte die Abfragemöglichkeit 'IsNull' überhaupt nicht auf dem Schirm (bin halt leider Anfänger :( ). Hatte mir zwischenzeitlich einen Workaround gebastelt und das Datum in String-Felder im Formular gesplittet.
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

Antworten