PDA

View Full Version : Excel MS Qurey und SQL7967 als Fehlercode



Asti
19-01-09, 12:41
Hallo,

habe ein Problem mit einer per Excel / MS Query erstellten Select Abfrage.

An unterschiedlichen Clients wird bei Abfrage "plötzlich" ein Fehler "SQL7967" zurück gegeben obwohl die Abfrage bisher ohne Fehler ausgeführt werden konnte.

Die Abfrage verwendet für ein in Excel einzugebendes Datum ein ? als Platzhalter (zur automatischen Aktualisierung der Abfrage), daher wird es scheinbar als Prepared Statement behandelt?!

Gibt man in MS Qurey das Datum direkt ein, oder ersetzt man das ? in MS Query durch einen Wert, werden die Daten erfolgreich abgefragt (und an Excel zurück gegeben).

Das Jobprotokoll weist weitere Hinweise aus:

SQL0901 SQL Systemfehler
MCH3601 Zeiger für angegebene Position nicht gesetzt.
Ursache . . . . : Es wurde ein Zeiger, entweder direkt oder als ein
Basiszeiger verwendet, für den keine Adresse festgelegt worden war.

Ändert man am betroffenen Client die ODBC Einstellung für das Datumsformat von ISO auf EUR (System DSN gegen AS/400, Server/Erweitert/Datum/Format), lässt sich die Abfrage ausführen.

In folgenden CA Version / ODBC Treiber Konstellationen tritt der Fehler auf:
ODBC Treiber 8.00.03.00
Version 5 Release 1 Modifikationsstufe 0
ODBC Treiber 11.00.06.00
Version 5 Release 4 Modifikationsstufe 0
ODBC Treiber 11.00.02.00
Version 5 Release 4 Modifikationsstufe 0

In dieser Konfiguration jedoch nicht:
ODBC Treiber 10.00.08.00
Version 5 Release 3 Modifikationsstufe 0

Es wurden seitens Admin keine PTFs eingespielt und keine Konfigurationsänderungen an der AS/400 oder am Client PC vorgenommen (jetziger Kenntnisstand).

Welche Konfiguration auf der AS/400 könnte den o.a. Umstand auslösen? Wo und wie kann ich die Ursache weiter eingrenzen.

(iSeries V5R4, Client win XP / Office 2003)

Gruß Asti

Fuerchau
19-01-09, 13:59
Das Problem ist dieautomatische Datumerkennung.
Wenn du das Datum eingeben läßt, ist das Format nicht unbedingt garantiert (Jobumgebung, ODBC-Einstellung usw.).

Entweder schreibst du vor, dass das Datum immer in der Form YYYY-MM-TT eigegeben wird, das wird immer erkannt oder du weist dem Parameter eine spezielle Zelle zu.
Excel erkennt dann entweder automatisch das Datumformat oder du formatierst die Zelle explizit als Datum.

Parameter Zellen zuweisen ist sowieso die elegante Art des MS-Query.

Asti
19-01-09, 14:11
Der Parameter ist einer Zelle zugewiesen, bzw. die Zelle dem Paramter. (User gibt neues Datum ein, Abfrage wird aktualisiert).

Das Format ist definiert (aber als Datum EUR). Bei einigen PCs funkts noch, bei anderen nicht mehr(und das ohne Änderung am Dokument).

Meine Vermutung war/ist eine Änderung auf AS/400 Seite, da auch an meinem Entwickler PC die Abfrage in der Originalkopie des Dokuments nicht mehr möglich ist (bzw. nur dann, wenn EUR als Datumfsormat in der ODBC Quelle ausgewählt wird, wir konfigurieren aber ISO als Standard).

Fuerchau
19-01-09, 14:21
ISO erzwingt eben YYYY-MM-TT.
Ggf. hängts auch von der Excel-Version ab, so dass der Feldinhalt gar nicht als Typ Date sondern als String übergeben wird.
In diesem Fall solltest du mal die Zelle mit einem eigenen Datumformat "YYYY-MM-DD" formatieren.

Asti
19-01-09, 17:14
Hallo,

meine Vermutung, dass doch ein Fehler auf Seiten der AS/400 vorliegt, habe ich durch diesen Artikel

Four Hundred Guru--Admin Alert: One Common Cure for SQL0901 Package Errors (http://www.itjungle.com/fhg/fhg091306-story03.html)

bestätigen können und mit Hilfe eines älteren Eintrages im Forum

http://newsolutions.de/forum-systemi-as400-i5-iseries/system-i-hauptforum/6458-sql0901-odbc-aus-excel-r530.html

auch direkt einen Workaround gefunden.

Auf unserer Testmaschine lassen sich seit Löschen des QGPL/QZDAPKG nun wieder alle Statements ausführen (und auch neue anlegen).

Eine Frage bleibt jetzt noch:

Wenn das Objekt QGPL/QZDAPKG gelöscht wurde, müssten/sollten auch alle anderen vorhanden Packages gelöscht werden? Wird das Objekt QZDAPKG aus den anderen (z. B. MSQRY32FAI) "gefüllt" oder werden die anderen autom ungültig?

Gruß Asti

Fuerchau
21-01-09, 09:26
QZDAPKG wird ausschließlich vom Hostservice verwendet (i.W. Schemainformationen).
Alle anderen Pakete werden durch die jeweilige Anwendung erstellt.

Den Paketnamen kann man in der ODBC-Konfig festlegen oder in der Verbindungsfolge angeben.
Ich habe mir angewöhnt, hier immer die Lib QTEMP anzugeben, damit gabs nie Probleme.

Den Inhalt kannst du per PRTSQLINF ansehen.

Asti
22-01-09, 12:18
... es können alle Packages (also auch die anwendunsgbezogenen) ohne Gefahr gelöscht werden?

Das wäre mir sowieso lieb, denn einige dümpeln da scheinbar seit 1999 vor sich rum (in QGPL).

BenderD
22-01-09, 13:12
nein, nur die, die von ODBC oder JDBC angelegt worden sind.

D*B


... es können alle Packages (also auch die anwendunsgbezogenen) ohne Gefahr gelöscht werden?

Das wäre mir sowieso lieb, denn einige dümpeln da scheinbar seit 1999 vor sich rum (in QGPL).