PDA

View Full Version : ODBC Zugriff aus EXCEL



Hubert
25-03-14, 16:28
Guten Tag zusammen,

seit mehr als einem Jahr läuft bei uns ein VBA Script in Excel, das Daten aus der AS/400 liest und daraus einen Report generiert. Der Zugriff erfolgt über ODBC. Nachdem das EXCEL auf einen anderen Server gespielt wurde, kann [B]eine[B] der angesprochenen Dateien nicht mehr gelesen werden.


strselect = "select * from SYSCHK.SYSCHK"
With rsAS400
.CursorType = adOpenForwardOnly
.CursorLocation = adUseClient
.Open strselect, conAS400
End With



Beim Open kommt die Fehlermeldung:

254

Während die Datei geöffnet werden soll, ist die Verbindung zur AS/400 aktiv. Andere Dateien werden problemlos geöffnet.

Hatte jemand von Euch eine Idee, woran das liegen kann?

Herzlichen Dank im Voraus

Hubert

Fuerchau
25-03-14, 16:53
Da ist wie immer Raten angesagt.
- Unterschiedliche Excel-Versionen
- Unterschiedliche ADODB-Versionen

Beim ClientCursor wird das Recordset komplett in den Speicher geladen.
Ggf. kommt ADODB mit irgendeinem Feldtyp der Quelltabelle nicht zurecht, da diese angepasst werden müssen (z.B. max. Decimal(28, 4), kein BIGINT u.ä.).
Versuche mal mit adUseServer da du ja nur vorwärts liest (ist ggf. auch noch schneller!).
Dann stirbt er beim entsprechenden Satz.

Über die ODBC-Konfiguration kannst du den Debug-Modus aktivieren und in das Joblog des QZDASOINIT-Jobs schauen.

Hubert
26-03-14, 08:02
Wie gesagt, auf dem alten Server läuft es immer noch, nur auf dem neuen nicht und es betrifft nur eine Datei. Der Zugriff auf andere Dateien im selben Verzeichnis funktioniert einwandfrei. Die Berechtigungen sind übrigens identisch. Das finde ich schon sehr mysteriös.


Ggf. kommt ADODB mit irgendeinem Feldtyp der Quelltabelle nicht zurecht
Die Datei hat ein Feld mit der Länge 132. In die Datei wird ein Spoolfile kopiert.


Versuche mal mit adUseServer
Das Öffnen geht dann fehlerfrei, aber beim ersten Zugriff aufs Recordset:


Do
If rsAS400.EOF Then
Exit Do
End If


stürzt Excel komplett ab.

Im Joblog des QZDASOINIT finde ich dann die Nachricht CPE3426:
Eine Verbindung zu einem fernen Anschluß wurde durch diesen Anschluß zurückgesetzt.

Fuerchau
26-03-14, 08:38
Das ist schon seltsam.
Die Datei wird mit Sicherheit CCSID 65535 aufweisen.
Ist ggf. der Server selber in einer anderen Sprache (z.B. Englisch) und der alte in Deutsch installiert?
Verwendest du eine ODBC-Verbindung und hast hier für Umsetzung 65535-umsetzung angehakt?
Bist du sicher, das aktuelle Servicepack von CA installiert zu haben?
Versuche mal die Daten per MS-Query (externe Daten) in Excel zu laden und prüfe das Ergebnis.

Ggf. muss du doch das Feld mal per Cast in CCSID 273 konvertieren.

Hubert
26-03-14, 10:08
Die Server sind beide in Deutsch und haben das gleiche Servicepack von CA. Einen Unterschied habe ich jetzt gefunden: auf dem alten Server ist Excel 32 Bit und auf dem neuen 64 Bit. Gibt es auch einen 64 Bit Treiber?

Die CCSID habe ich auf 273 angepasst, hat aber nichts gebracht.

Das Geheimnis, warum die anderen Dateien geöffnet werden können: sie sind leer. Wenn die SYSCHK Datei leer ist, kann sie auch ohne Fehlermeldung geöffnet werden. Dann nutzt es mir aber nichts. :D

Fuerchau
26-03-14, 10:55
Es gibt zwar 64-Bit-Treiber, allerdings ist VBA immer in 32-Bit!
Wichtig ist also die Einstellung beim ODBC, dass du auch eine 32-Bit-ODBC-Einstellung machst.
Im Menü "IBM System i Access für Windows" findest du auch einen Link für die 32-Bit-ODBC-Verwaltung.

Bisher habe ich da auch unter 64-Bit nie Probleme gehabt.
Wenn du mal den Taskmanager aufrufst und die Office-Programme betrachtest (z.B. Excel.exe), so wirst du feststellen dass die alle unter 32-Bit laufen!

Hubert
27-03-14, 15:24
Hallo Baldur,

es ist mir schon peinlich: ein Kollege hatte eine neue Installation mit CA 7.1 auf dem neuen Server durchgeführt, ohne mich zu informieren und hatte kein Service Pack installiert. Nachdem das Service Pack installiert war, lief es dann auch endlich.

Herzlichen Dank für die Mühe, die du dir gegeben hast.

Hubert

Fuerchau
27-03-14, 15:56
Sowas passiert halt immer wieder.
Eher eigentlich schade, dass CA noch nie ohne Servicepack funktionierte, egal welche Version.