Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FireBird, Datentyp TIME clientseitig mit Delphi bestücken (https://www.delphipraxis.net/163722-firebird-datentyp-time-clientseitig-mit-delphi-bestuecken.html)

Daniel 13. Okt 2011 10:32

Datenbank: FireBird • Version: 2.5 • Zugriff über: FibPlus

FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Moin,

ich habe hier mit einer Datentpalte zutun, die vom Typ "TIME" ist. Wie setze ich deren Wert clientseitig in meiner Delphi-Anwendung? Gebe ich einen Timestamp, der nur einen Zeit-, aber keinen Datumswert enthält, bekomme ich einen Fehler, dass der Wert ungültig sei. Auch Tests mit fixen Ganz- oder Fließkommazahlen schlugen fehl. Nicht mal eine 0 (Zahlenwert) wird akzeptiert.

Ich hatte gehoft, dass ich auch diesen Wert wie üblich mit
Delphi-Quellcode:
FieldByName('...').Value:= xy
setzen kann. :gruebel:

tsteinmaurer 13. Okt 2011 10:37

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Hallo Daniel,

kann es vielleicht etwas mit dem Variant zu tun haben? Hast mal versucht native Zugriffs-Properties ala AsDateTime ... zu verwenden?

Daniel 13. Okt 2011 10:41

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Ja, .AsDateTime habe ich auch versucht - ohne Erfolg.


Ich sehe gerade, dass FibPlus ein .AsTime anbietet, laut Doku aber nur in der Query und nicht im DataSet - mal schauen, ob das so (noch) stimmt.

Lemmy 13. Okt 2011 11:03

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Hi,

Zitat:

In dialect 3, TIME stores the Time of day, with no date portion: "time-only". Storage is a 32-bit unsigned integer. Storable times range from 00:00 to 23:59:59.9999. ...

If time of day needs to be stored, extract the hours, minutes and seconds elements from the Date data and convert it to a string...
aus "The Firebird Book"... also versuchs mal über einene entsprechenden String....

Grüße

tsteinmaurer 13. Okt 2011 11:29

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
@Daniel: Kriegst du eine Delphi oder eine Firebird Exception? Da der TIME Datentyp mit Dialect 3 zur Verfügung steht ist die Frage, ob du dich mit FIBPlus auch mit Dialect 3 verbindest?

tsteinmaurer 13. Okt 2011 11:46

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Bei mir klappt ein:

Code:
DBGrid1.DataSource.DataSet.FieldByName('MYTIME').AsDateTime := Now;
Bei folgender Firebird 2.5.1 Dialect 3 Tabelle:

Code:
CREATE TABLE T1 
(
  ID                  BIGINT        NOT NULL,
  MYTIME                TIME,
 CONSTRAINT PK_T1 PRIMARY KEY (ID)
);
ohne Probleme. Verwende allerdings IBDAC 4 mit Delphi 2010.

Daniel 13. Okt 2011 12:03

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Ich werde das Szenario gleich mal auf ein Mini-Beispiel herunter brechen. Möglicherweise läuft hier irgendwas anderes schief, da der Datentyp des Felds korrekt als ftTime erkannt wird, aber keine der hier bisher genannten Zuweisungen funktionieren wollte.

Den SQL-Dialekt werde ich prüfen - ich habe das Projekt übernommen und wenn diese falsch gesetzt wäre, dann würde dies bedeuten, dass dem schon sehr lange Zeit so gewesen sein muss.


Vielen Dank schon mal für das Ausprobieren. :-)

mkinzler 13. Okt 2011 12:05

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Wenn die Datenbank schon alt ist ( aus IB Zeiten), dann bleibt der Dialect 1 bestehen.

Daniel 13. Okt 2011 12:08

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Also FibPlus verbindet sich explizit mit Dialekt 3. Das Feld steht ja auch so in der DB und wenn ich den Wert via Trigger zuweise (ich greife dazu auf CURRENT_TIMESTAMP zu), dann geht's auch und sowohl IBExpert als auch meine eigene Anwendung zeigen den korrekten Wert.

tsteinmaurer 13. Okt 2011 12:18

AW: FireBird, Datentyp TIME clientseitig mit Delphi bestücken
 
Welchen Datentyp hat denn das persistente Feld when ftTime gesetzt ist? Bei mir wird ein persistentes Feld als TTimeField erstellt, wo dann FieldKind auf fkData gesetzt ist. Würd das wirklich mal mit einem einfachen Beispiel versuchen nachzubilden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.
Seite 1 von 2  1 2      

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