![]() |
Datenbank: Absolute DB • Zugriff über: absQuery
Problem mit Datefeld in DB, wenn Datum nicht vorhanden ist
Ich habe ein kleines Problem mit einem DATETIME Feld in einer DB.
Ich importiere die Feldinhalte aus einer Textdatei in die Datenbank. Unter anderem gibt es das Feld GWENDE, welches ein Datum enthält. In manchen Fällen enthält es jedoch auch keine Daten. So füge ich die Daten in die DB ein. Die Übergabe der Daten erfolgt über den Record TP.
Delphi-Quellcode:
Beim Auslesen der Daten aus der Textdatei muss ich dem Feld TP.GWENDE etwas zuweisen. Falls keine Daten vorhanden sind weise ich 0 zu, was dummerweise beim Auslesen der Daten aus der DB zu einem Datum von 30.12.1899 führt, klar. Jetzt könnte ich das natürlich einfach optisch kaschieren und bei der Anzeige im Falle von diesem Datum nichts anzeigen, aber das gefällt mir nicht so ganz. Ich hätte lieber, dass das Feld in der DB einfach leer ist. Aber mir fällt nicht ein wie ich dass hinkriege.
TTP = record
TPID: String; TPBEZ: String; KST: String; SAPNR: String; ANLNR: String; HERST: String; GWENDE: TDateTime; AUS: Boolean; LASTCH: TDateTime; end; ... SQL.Add('INSERT INTO TP VALUES(:PTPID,:PTPBEZ,:PKST,:PSAPNR,:PANLNR,:PHERST,:PGWENDE,:PAUS,:PLASTCH);'); Params.ParamValues['PTPID']:=TP.TPID; Params.ParamValues['PTPBEZ']:=TP.TPBEZ; Params.ParamValues['PKST']:=TP.KST; Params.ParamValues['PSAPNR']:=TP.SAPNR; Params.ParamValues['PANLNR']:=TP.ANLNR; Params.ParamValues['PHERST']:=TP.HERST; Params.ParamValues['PGWENDE']:=TP.GWENDE; Params.ParamValues['PAUS']:=TP.AUS; Params.ParamValues['PLASTCH']:=TP.LASTCH; Jemand ne Idee? Danke! |
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Setze es doch auf NULL
|
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Wie?
Delphi-Quellcode:
funktioniert ja so nicht.
Params.ParamValues['PGWENDE']:=NULL;
Muss ich jetzt je nachdem, ob ein Datum vorhanden ist oder nicht zwei unterschiedliche INSERTS machen? |
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Zitat:
Delphi-Quellcode:
Vorraussetzung ist natürlich, dass in der DB das Feld PGWENDE nicht als not-Null definiert ist. Es muss also NULL-Werte akzeptieren.
Params.ParamByName('PGWENDE').Value := nil;
/Offtopic Weiter oben im Code musst Du ein with Query do haben. Sei so gut und eliminiere das with. |
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Hallo,
mit der Methode Clear() wird normalerweise ein Parameter auf NULL gesetzt. Sobald NULL-Werte verarbeitet werden sollen, sind binäre Datentypen in der Zwischenspeicherstruktur TTP nicht so optimal, da dann doch wieder ein Wert aus dem Wertebereich speziell interpretiert werden muss. Freundliche Grüße |
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Delphi-Quellcode:
Funktioniert nicht.
Params.ParamByName('PGWENDE').Value := nil;
Delphi-Quellcode:
Scheint zu funktionieren (bin nicht ganz sicher).
Params.ParamByName('PGWENDE').Clear;
Das Problem ist jetzt, dass ich ja das Feld auch auslesen muss und nach dem SELECT zur Anzeige demselben Record TP zuweise.
Delphi-Quellcode:
Letztendlich bekomme ich dann wieder die Anzeige "1899", was mich zu folgendem Zitat bringt:
TP.TPID := FieldByName('TPID').AsString;
TP.TPBEZ := FieldByName('TPBEZ').AsString; TP.KST := FieldByName('KST').AsString; TP.SAPNR := FieldByName('SAPNR').AsString; TP.ANLNR := FieldByName('ANLNR').AsString; TP.HERST := FieldByName('HERST').AsString; TP.GWENDE := FieldByName('GWENDE').AsDateTime; TP.AUS := FieldByName('AUS').AsBoolean; TP.LASTCH := FieldByName('LASTCH').AsDateTime; Zitat:
|
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Delphi-Quellcode:
Dann musst Du eben in Deinem Programm
if FieldByName('GWENDE').ISNull then
TP.GWENDE := -1 else TP.GWENDE := FieldByName('GWENDE').AsDateTime; TP.GWENDE auf -1 abfragen Es wuerde sich ohnehin empfehlen statt eines Records ein Objkekt zu nehmen, dann koennten die Felder als properties angesprochen und ausgelesen werden, wo du die entsprechenden Fallunterscheidungen einbauen kannst... |
Re: Problem mit Datefeld in DB, wenn Datum nicht vorhanden i
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz