Tdbf - Leere Datumfelder 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

Tdbf - Leere Datumfelder prüfen [gelöst]

Beitrag von and4more »

Hallo liebes Forum, habe schon wieder eine Wissenslücke, und zwar möchte ich bei einer dBase-Datenbank (Tdbf) ein Datumsfeld abfragen ob es leer ist, aber die Versuche mit:

Code: Alles auswählen

 
if (dbf.fieldbyname('xyz').asDate<>NIL 
                                   NULL
                                   ''
                                   30.12.1899) then ...
 


führen alle zu einer Fehlermeldung wegen falschem Datentyp. Gibt es eine Möglichkeit ein Datumfeld auf Inhalt zu prüfen?

Schon mal vielen Dank im Voraus.
Zuletzt geändert von and4more am Fr 27. Jan 2017, 23:22, insgesamt 1-mal geändert.
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

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

Re: Tdbf - Leere Datumfelder prüfen

Beitrag von wp_xyz »

Leere Datenbankfelder erkennt man mit IsNull:

Code: Alles auswählen

  if dbf.FieldByName('xyz').IsNull then ... 

Hinweis: Es ist schlecht, FieldByName() innerhalb einer Schleife aufrufen, weil dabei jedesmal die Liste aller Felder durchsucht werden soll. Besser ist es, das vor der Schleife zu erledigen und das Feld in einer Variablen zwischenzuspeichern:

Code: Alles auswählen

 
// schlecht
  n := 0;
  dbf.First;
  while not dbf.EoF do begin
    if not dbf.FieldByName('xyz').IsNull then inc(n);
    dbf.Next;
  end;
 
// besser
var
  F: TField;
begin
  F := dbf.FieldByName('xyz');
  dbf.First;
  while not dbf.EoF do begin
    if not F.IsNull then inc(n);
    dbf.Next;
  end;

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: Tdbf - Leere Datumfelder prüfen

Beitrag von and4more »

Danke für die total super Antwort, insbesondere der Bonus-Antwort mit Zwischenspeicherung. Hilft mir extrem weiter. Vielen Dank.
Lazarus 1.6.4 32-Bit + 64-Bit, Windows 10 64-Bit, Manjaro Linux 64-Bit

Antworten