PDA

View Full Version : Insert auf SQL-Server datetime - Zeit stimmt nicht



Hatl
03-08-09, 15:59
Hallo!

Ich ermittele per RPG-SQL Daten aus einer AS400 Datei und schreibe sie in eine Tabelle auf einem MS SQL-Server.

Funktioniert ansich problemlos, jedoch die Zeit in meinen Zeitfeld (am SQL-Server)vom Typ datetime stimmt nicht.

So schriebe ich die Daten auf den SQL-Server:



stmt = JDBC_PrepStmt(conn : 'Insert Into '+%trim(inserttab)+ ' ' +
'([Feld1], [Feld2], [Datum], [Zeit])'
+ ' values (?,?,?,?)' );

if (stmt = *NULL);
ErrMsg = 'Prepare Statement failed!';
return *OFF;
endif;
//Werte zuweisen
JDBC_setString (stmt: 1: sq#Feld1 );
JDBC_setString (stmt: 2: sq#Feld2 );
JDBC_setDate (stmt: 3: sq#Datum );
JDBC_setTime (stmt: 4: sq#Zeit );


Wenn ich mir hier im Debugger den Inhalt von Zeit anschaue sehe ich z.b. 07:00:00

Am SQL-Server steht dann aber in dem Datensatz 06:00:00. (mit Datum da datetime).


Hat jemand eine Idee woran das liegen könnte?
Ich greife die Zeit niergends an, die Systemzeit am Server ist auch ok?


Bin für jeden Tip dankbar!

lg

Rene Marquardt
04-08-09, 11:44
Hallo Hatl,

schau Dir mal Deine System Werte QTIMZONE und QUTCOFFSET
an. Ich kenne so ein Phänomen z.B. in Mail Clients wenn Mail
von der iSeries gesendet werden. Aktuell sollten die so aussehen.

Systemwert . . . . . . : QUTCOFFSET
Beschreibung . . . . . : Abweichung von der Weltzeit
Abweichung . . . . . . : +02:00 -24:00 bis +24:00


Systemwert . . . . . . : QTIMZON
Beschreibung . . . . . : Zeitzone
Zeitzone . . . . . . . : QP0100CET2 Name
Zugeordnete Einstellungen:
Abweichung . . . : +02:00
Voller Name . . : Central European Daylight Saving Time
Kurzname . . . . : CEST



Gruß R

Hatl
04-08-09, 12:26
Vielen Dank!

Die Systemwerte sind ok, schauen genau so aus.
Hmm ich werde weitersuchen.

lg

Hatl
06-08-09, 15:29
Ich habe jetzt endlich eine Lösung gefunden.
Es funktioniert, wenn man in eine Variable (19 alpha) die Zeit in der Form eines datetime - Feldes schriebt.
z.b. '01.01.1900 12:10:00'
Das kann dann als String (nicht time oder date) in ein datetime - Feld am SQL-Server eingetragen werden und die Zeit stimmmt.

lg

Fuerchau
09-08-09, 11:41
Der SQL-Server scheint da die UTC-Zeit zu verwenden. Kann auch eine Treiber-Einstellung sein, dass bei Datum/Zeit die Timezone beim Schreiben/Lesen verrechnet wird.
Bei einem Timestamp scheint das wiederum nicht zu gelten.