Entwickler-Ecke

Datenbanken - Zeit Rückgabeformat


Torsten Richter - Di 08.12.09 12:28
Titel: Zeit Rückgabeformat
Hallo,

ich habe auf einem MSSQL-Server eine SP, die mir die Serverzeit liefert
SELECT GETDATE() as Serverzeit

Das Ergebnisformat ist DateTime und sieht so aus : 2009-12-08 10:05:21.607

In Delphi (2009) rufe ich diese SP über eine TADOStoredProc auf
spServerZeit['Serverzeit']
Der Versuch, das Ergebnis ein eine TDateTime Variable zu bringen ergibt 0
Beim ablegen in einen String erhalte ich 08.12.2009 15:05:21

Also erkennt Delphi das Datumsformat und manipuliert es.

Wie kann ich das Ergebnis direkt in eine Variable vom Typ DateTime speichern ?
Wenn es nicht geht : wie kann ich den original-String der Datenbank erhalten (ohne geänderte Formatierung) ?

tia
Torsten


Muck - Di 08.12.09 17:09

Hallo,

habe gleiches Problem mit der Datumsformatierung, bei mir allerdings bei einem Programm, das mit SQL 2005 und SQL 2008 laufen muss. In 2008 sind ja neue Feldtypen dazugekommen fuer Datum und Zeit.

Ich benutze Delphi 2009 und SQL 2008 auf Windows Server 2003 SP2. Bei mir funktioniert das direkte einlesen mit:

Delphi-Quelltext
1:
2:
3:
4:
5:
var X:TDateTime;
AdoQuery1.SQl.Add('Select GetDate() as ServerZeit');
AdoQuery1.Open;
X:=ADOQuery1['ServerZeit'];
AdoQuery1.Close;


Es mag sein, dass sich SQL 2005 anders verhaelt. Ich hatte seinerzeit im Change Ereignis des Eingabefeldes mit Datumsfunktionen gespielt, bis sich das Programm mit SQL 2005 und SQL 2008 gleich verhielt.
Den Anwender stoerte das Ausgabeformat YYYY-MM-DD HH:MM:SS.999 im DBEdit.
Probiere doch einfach entweder den cast im SQL String zu aendern, oder das Feld erst in einen String zu packen.


Delphi-Quelltext
1:
AdoQuery1.SQl.Add('Select cast(GetDate() as DateTime) as ServerZeit');                    

(habe kein SQL 2005 mehr um zu testen)


Delphi-Quelltext
1:
X:=StrToDateTime(ADOQuery1['ServerZeit']);                    


Vielleicht ist aber auch alles viel einfacher und da ist eine Datums Einstellung irdgendwo im MS SQL Setup?
Wuerde mich auch interessieren, insbesondere fuer Applicationen, die mit SQL 2005 und SQL 2008 laufen muessen.

Markus


Torsten Richter - Mi 09.12.09 00:27

Hallo Martin,

vielen Dank für deine Antwort.

Die Ursache des Verhaltens war die Optimierung des Debuggers.

Ich hatte die Ergebnisvariable nicht ausgewertet, sondern mir nur das Ergebnis bei zeilenweiser Abarbeitung angesehen.
Nach einer Verarbeitung der Variablen bekomme ich auch das erwartete Ergebnis.

Das Verhalten von MS SQL 2005 und 2008 ist diesbezüglich identisch.

Was mich in dem Zusammenhang noch interessiert ist: wie bekomme ich heraus, welche Zeitzone der Server hat ?

gruss Torsten