Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeit in Firebird-DB speichern (https://www.delphipraxis.net/208977-zeit-firebird-db-speichern.html)

harfes 8. Okt 2021 08:20

Datenbank: Firebird • Version: 3 • Zugriff über: IBDAC

Zeit in Firebird-DB speichern
 
Ich habe in Firebird in einer Tabelle eine Feld als TIME angelegt (ZEITSTART TIME) und möchte nun die Startzeit darin speichern (und zwar nur die Zeit, Datum interessiert an dieser Stelle nicht - die Eingabemaske ist ein DateTimePicker). Das versuche ich mit einer Query zu speichern:

Params[3].Value:= TimeToStr(AdvDateTimePicker2.Time);

und bekomme immer einen Conversion-Error from String. Wenn ich mir allerdings das mit showmessage(TimeToStr(AdvDateTimePicker2.Time) anzeigen lasse, ist alles ok. Mache ich das gleiche mit Date (Params[2].Value:= DateToStr(AdvDateTimePicker1.Date)) funktioniert es auch. Was mache ich da falsch?

Hartmut

Delphi.Narium 8. Okt 2021 08:36

AW: Zeit in Firebird-DB speichern
 
Du hast doch auf beiden Seiten einen Zeitwert, warum gehst Du über Value und String?

Klappt es denn eventuell so:
Delphi-Quellcode:
Params[3].AsTime := AdvDateTimePicker2.Time;
Zumindest mit den Zeos-Komponenten dürfte das so funktionieren.

Nachtrag:
TDAParam Members scheint .AsTime nicht zu kennen. Aber zumindest .AsString. Dies würd' ich dann auch bei der Übergabe eines Strings verwenden, statt .Value, da damit zumindest bei der Wertübergabe in Delphi die Typsicherheit gegeben ist. Damit spart man sich die (eventuell) möglichen Typunsicherheiten bzw. die zusätzliche Konvertierung, die beim Umweg über .Valus (= Variant) möglich sein könnten.

Da TDateTime und damit Time in Delphi letztlich Floats sind, könnte .AsFloat auch noch 'ne Alternative sein.

haentschman 8. Okt 2021 08:37

AW: Zeit in Firebird-DB speichern
 
Hallöle...8-)

:warn:
Niemals Zeit oder Datum als String in die DB speichern!

Richtig hast du es ja schon gemacht.
Zitat:

als TIME angelegt
:thumb:

Speichern:
Delphi-Quellcode:
Params[3].Value:= AdvDateTimePicker2.Time;
oder
Delphi-Quellcode:
ParamByName('BlubbOderSo').AsDateTime:= AdvDateTimePicker2.Time;

harfes 8. Okt 2021 08:53

AW: Zeit in Firebird-DB speichern
 
Danke euch beiden!

Ich habe es jetzt wie von Delphi.Narium vorgeschlagen gelöst:

Params[3].AsTime := AdvDateTimePicker2.Time;

Das funktioniert jetzt! Warum das mit Date funktioniert ist mir jetzt nicht ersichtlich, aber solange es funktioniert...

Hartmut

Delphi.Narium 8. Okt 2021 09:02

AW: Zeit in Firebird-DB speichern
 
Meine Regel diesbezüglich ist einfach und konsequent:

Links vom := wird immer .AsDatentyp genommen, der dem rechts vom := entspricht. .Values nur dann, wenn ich nicht weiß, was rechts vom := steht. Und das war bisher noch nie der Fall ;-)

Values ist ein Variant. Bei dem wird der Inhalt immer interpretiert. Man weiß also nie so 100%ig genau, ob der Inhalt auch so interpretiert wird, wie man es erwartet. Bei Deinem konkreten Fall scheint genau diese Unsicherheit "zuzuschlagen".


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 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