PDA

View Full Version : Timestamp über ODBC



Wwilson
23-06-14, 10:58
Guten Tag,

ein externes Programm nutzt über den ODBC Treiber unsere AS/400.
Es wird ein Datenbankeintrag ungefähr so geschrieben

INSERT INTO tabelle (time) VALUES ({ts 2014-06-23 11:57:00})

Mit V6R1 hat er hier keine Probleme gehabt.
Mit dem Update auf V7R1 Maschine und ODBC Treiber gibt es hier Probleme.

Ich habe mit einem Query Tool getestet über den Treiber auf die neue Maschine und er scheint den Satz nur zu schreiben, wenn ich {ts} aus der Abfrage nehme.
Ich habe keinen Einfluss momentan auf die externe Software, ich habe das aktuellste PTF installiert.
Gibt es hier irgendeinen Hinweis was falsch laufen könnte?

Mit freundlichen Grüßen
Wilson

Fuerchau
23-06-14, 11:02
Da hilft wohl nur eine Fehlermeldung an IBM.
ODBC-Escapes werden vom ODBC-Treiber umgesetzt und an die AS/400 gesendet.

Wwilson
24-06-14, 14:32
Danke für die schnelle Antwort.
Gibt es eine Möglichkeit ein Supportticket o.ä bei der IBM einzurichten.
Habe auf deren Homepage nichts gefunden.

Fuerchau
24-06-14, 14:49
Ich denke mal, die Syntax ist falsch angewendet und wurde vom alten ODBC-Treiber nur toleriert:

INSERT INTO tabelle (time) VALUES ({ts '2014-06-23 11:57:00'})

Siehe auch:
http://msdn.microsoft.com/en-us/library/ms710282(v=vs.85).aspx
http://www-01.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzaik/escapescalar.htm?lang=en

Die IBM verweist hier auch auf die Microsoft-Seite.
Versuche es doch mal mit Hochkommata.

Wwilson
24-06-14, 14:54
Das ganze steht bereits in Hochkommata, sorry mein Fehler im Original Post.

Was er vorher toleriert hat war wohl einfach der Spaß mit den geschweiften Klammern und ts

Fuerchau
24-06-14, 16:26
Ja und nein.
Die {} stehen per Definition für ODBC-Escape-Sequenzen (Siehe Microsoft-Link).
Voraussetzung ist auch wirklich die Nutzung des ODBC-Treibers.
Für OLEDB ist das nicht definiert.

Was die Angabe ohne {ts} angeht, so liegt das am Autocast der AS/400 (auch vieler anderer Dialekte).
Ich kann schließlich auch per STRSQL einfach Date/Time/Timestamp's als Zeichenkette übergeben.
Wenn das Vergleichsfeld den korrekten Typ hat, wird gecastet.

z.B.:
mydate = '2014-06-24' -- ISO klappt immer
mydate = '26.04.14' -- hier zieht das Jobformat für Datum

Was die Fehlermeldung an IBM angeht, so hat jeder IBM-Kunde mit Wartungsvertrag entsprechende Zugangsinformationen um einen Call aufzumachen:).