Autor Beitrag
Torsten Richter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 08.12.09 12:28 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: 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:
ausblenden 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.

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

(habe kein SQL 2005 mehr um zu testen)

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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