PDA

View Full Version : Excel, ADO: Fehler bei Separator ";"



cavallino
10-09-10, 11:38
Hallo!

Seit Jahren frage ich verschiedenste Datenbanken von Excel mit ADO ab. Die SQL-Statements reichen von einfachen Abfragen bis zu komplexeren SQL-Prozeduren.

Nun habe ich bei solchen Abfragen zur AS/400 das Problem, dass der Separator ";" nicht funktioniert. Dh. mein SQL Statement ist z. B. so in der Art:

drop view xxx ;
create view ..... usw.

oder
select * from a; select * from b

selbst
select * from a;
funktioniert nicht. (ohne ; funktioniert es! Ich kann aber nicht mehrere Befehle hintereinander ausführen.)

Hier muss ein grundlegendes Problem vorliegen. Mein System: Win7 64bit, Excel 2007 (32bit), AS400: V5R4M0. Unten stehen die beiden Connection Strings und Fehlermeldungen.

lg
arno

Connection string:
Provider=IBMDA400.DataSource.1;Persist Security Info=False;User ID=ichselbst;Data Source=meinhobel;Protection Level=None;Initial Catalog=S1234567;Transport Product=Client Access;SSL=DEFAULT;Force Translate=65535;Default Collection=ichselbst;Convert Date Time To Char=TRUE;Catalog Library List="";Cursor Sensitivity=3;Use SQL Packages=False;SQL Package Library Name="";SQL Package Name="";Add statements to SQL package=True;Unusable SQL Package Action=1;Block Fetch=True;Data Compression=True;Sort Sequence=0;Sort Table="";Sort Language ID="";Query Options File Library="";Trace=0;Hex Parser Option=0;Maximum Decimal Precision=31;Maximum Decimal Scale=31;Minimum Divide Scale=0;Library List="";Naming Convention=0;Query Optimize Goal=0;Query Storage Limit=-1;Handle Numeric Data Errors=1;Keep Trailing Blanks=False;Application Name=EXCEL.EXE;Decfloat Rounding Mode=0;Decfloat Error Option=0;Client User ID="";Client WorkStation Name="";Client Program ID="";Client Accounting="";Block Size=0;

Die Fehlermeldung lautet:
"Error -2147467259 SQL0104: Token ; ungültig. Gültige Token: <ENDE DER ANWEISUNG>.
Ursache . . . . : Bei Token ; wurde ein Syntaxfehler entdeckt. Token ; ist kein gültiges Token. <ENDE DER ANWEISUNG> ist eine Teilliste gültiger Token. Diese Liste geht davon aus, dass die Anweisung bis zu diesem Token korrekt ist. Es kann eine frühere Stelle in der Anweisung fehlerhaft sein, aber bis zu dieser Stelle scheint die Syntax gültig zu sein. Fehlerbeseitigung: Einen der folgenden Schritte durchführen und die Anforderung wiederholen: - SQL-Anweisung im Bereich des Token ; überprüfen. Anweisung korrigieren. Der Fehler kann ein fehlendes Komma oder Anführungszeichen sein, er kann in einem falsch geschriebenen Wort oder in der Anordnung der Klauseln begründet sein. - Ist das fehlerhafte Token <ANWEISUNGSENDE>, die Anweisung korrigieren, da sie mit einer ungültigen Klausel endet. (Source: IBMDA400 Command) (SQL State: 42601) (NativeError: -104)"

ODBC Connectionstring:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=MeinsystemDSN_32;

ODBC Fehler:
Error -2147217887 Der ODBC-Treiber unterstützt die angeforderten Eigenschaften nicht. (Source: Microsoft OLE DB Provider for ODBC Drivers) (SQL State: ) (NativeError: 0)

TARASIK
10-09-10, 11:52
Hallo Arno,
ist denn dieses Servicepack auf Deinem Pc installiert ?

IBM SI29771 - CA400EXP-ODBC-MSGSQL0104 INCORRECT ERROR DUE TO SQL PACKAGE - United States (http://www-01.ibm.com/support/docview.wss?uid=nas3908762edab80ac35862573da0057e5 23)

TARASIK
10-09-10, 11:56
Hallo Arno,
tritt denn das Problem erst auf seitdem Du Windows 7 im Einsatz hast ?

Denn dann sollte mann schon das von IBM empfohlene ISeries Access R610 installiert haben.

Ein Versuch wäre auch das oben genannte Servicepack für R540, aber ich vermute, dass R610 ISeries Access benötigt wird. Natürlich auch mit dem neuesten Servicepack.

Fuerchau
10-09-10, 12:09
Der CA-ODBC-Treiber unterstützt leider keine mehrfachen SQL-Befehle.
Man muss die SQL-Befehle einzeln absetzen.
Dies liegt insbesonders in der Fehlerbehandlung, da beim Auftreten eines Fehlers die folgenden Statements nict mehr ausgeführt werden, man aber leider nicht erfährt welcher das denn war.
Deshalb lehnt der Treiber dies bereits ab.

cavallino
10-09-10, 12:42
Hallo zusammen!

>tritt denn das Problem erst auf seitdem Du Windows 7 im Einsatz hast ?

nein, tritt auch unter WinXP auf.

>ist denn dieses Servicepack auf Deinem Pc installiert ?

Meinst du wirklich PC? Der Download läuft. . .

>Deshalb lehnt der Treiber dies bereits ab.

Da hilft auch kein Servicepack etc?

lg
arno

Fuerchau
10-09-10, 12:47
Stimmt.
Das ";" für Folgebefehle wird fast nur vom Microsoft-Treibern (MDB, CSV, SQL-Server) unterstützt.

Auf der AS/400 gibt es den Befehl RUNSQLSTM, mit dem man auch mehrere Befehle (außer Select) abfahren kann.

Für ODBC oder embedded SQL ist das nicht möglich.

cavallino
10-09-10, 12:52
dank für die Infos!

Am SQL-Server muss (mit meiner Excel-ADO-Methode) nur ganz am Ende ein ";" stehen, zwischen den einzelnen Befehlen war es nicht notwendig.

lg
arno