PDA

View Full Version : VBA ADO 2.x bekommt immer die Meldung "Laufzeitfehler 430"



EKA
16-06-08, 14:30
Hallo,

bin derzeit dabei mich in VBA für Excel einzuarbeiten und scheitere bei dem Versuch, per ADO auf DB2/400 Release V5R3 zuzugreifen, egal welche ADO 2.x Version ich per Verweis auch zuordne.

Der Komponenten-Checker für MDAC liefert die Info, das die Version 2.8 SP1
registriert ist. Trotzdem, es kommt beim Versuch über F5 im VBA Editor immer die Meldung: Laufzeitfehler '430': Klasse unterstützt keine Automatisierung .....

Es ist auch egal, wie ich die Verbindungsparameter mitgebe. Es funktioniert einfach nicht.

Vielen Dank für eine Antwort.

Fuerchau
16-06-08, 15:54
Prüfe mal per F8 (Einzelschritt) bei welchem Befehl genau der Fehler auftritt.

EKA
16-06-08, 16:24
Hallo Herr Fuerchau,

vielen Dank für die schnelle Antwort.

Hier ist mein Beispiel:

Dim conn As New ADODB.Connection

Dim rec As New Recordset
Dim ws As Worksheet
Dim sql$, i&
Set ws = ThisWorkbook.Worksheets("intro")
conn.Open "Provider=IBMDA400;" + _
"Data Source=S65xxxxx;" + _
"UserID=XXX;" + _
"Password=xxxxxxx;"
sql = "SELECT NAME, NACHNA " & _
"FROM EKA.TESTVBA ORDER BY NACHNA"
rec.Open sql, conn

.
.
.


Beim Aufruf conn.Open kommt die Fehlermeldung. Bei der Office Version handelt es sich im übrigen um Office 2002.

Ich habe es aber auch mit der Angabe einer DSN und UserID/Password per Properties Angabe versucht. Die gleiche Meldung.

Was mir allerdings auffällt: Die DSN bei den den ODBC-Quellen sind bei den Benutzer DSN angelegt, nicht bei den System-DSN.

Gruss
EKA

Fuerchau
16-06-08, 17:22
Der Provider IBMDA400 unterstützt keine DSN, da DSN nur für ODBC ist.
Für ODBC musst du den Provider MSDASQL verwenden (ist hier sowieso besser).

Dabei ist es unerheblich ob System- oder User-DSN verwendet wird.
Einzig Datei-DSN führt meistens zu Fehler.

Ggf. solltest du die Eigenschaft
conn.properties("Prompt")=adDriverComplete
verwenden.

Unter ADO sollten besser die Eigenschaften
conn.properties("User Id")="MyUser"
conn.properties("Password")="MyPass"
benutzt werden.

EKA
17-06-08, 20:15
Hallo Herr Fuerchau,

habe es mit den Einträgen versucht:

Dim conn As New ADO.Connection

conn.connection = "DSN=MyDSN"
conn.properties("User ID") = "MyUserID"
conn.properites("Password")= "MyPwd"

Gleiche Meldung 430 beim Auf von conn.connection.

Wenn ich im Forum richtig gelesen habe, kann man bei der ADO Schnittstelle als DSN auch eine ODBC-Verbindung angeben (Siehe Beitrag: Aus Excel Zellenwert an AS400 übertragen, aus November 2007).

ie kann ich denn überhaupt den Provider IDMDA400 auf meinem PC erkennen? Wird er von Client Access installiert?

Wenn ich es per ADO nicht hinbekomme, werde ich am Freitag mit einer ODBC-Verbindung weiter testen.

Vielen Dank für Ihre Unterstützung.

Fuerchau
18-06-08, 13:40
DSN=XXX bezeichnet IMMER einen gültigen ODBC-Eintrag.

Ich würde da nochmal die Service-Stufe des ClientAccess überprüfen. Ggf. ist die nicht aktuell.

EKA
19-06-08, 11:51
Das Problem ist gelöst:

Der ComponentenChecker cc.exe meldete das msado15.dll von ADO 2.81 UNKNOWN sei.

Ich habe ADO 2.81 über das Internet erneut heruntergeladen und installiert.

Fehler 430 trat danach noch immer auf.

Habe dann mit regsvr32.exe "C:\Programme\Gemeinsame Dateien\system\ado\msado15.dll"
erneut die msado15.dll registriert.

Danach kamm die Verbindung zustande.

Herr Fuerchau, nochmals vielen Dank für Ihre Unterstützung,

Gruss
EKA