PDA

View Full Version : Daten via ODBC in Access ohne DSN



ambix
08-07-10, 16:51
Hallo zusammen,

ich versuche mittels VBA, Daten aus einer AS400 Tabelle zu selektieren und das Ergebnis in eine Access Tabelle zu kopieren. Dabei möchte ich unbedingt auf DSNs verzichten, weil ich keine DSN Installation durchführen möchte und obendrein der User überhaupt keinen Zugriff auf die AS400 Tabelle hat, das Passwort im VBA Code ist dem User unbekannt (und durch Access Mittel geschützt).

Der vielversprechendste Ansatz von sehr, sehr vielen war dieser:

DoCmd.RunSQL "SELECT * INTO AccessTable FROM [ODBC;Driver=iSeries Access ODBC Driver;SYSTEM=as400ip;DBQ=as400lib;UID=user;PWD=pw d;CMT=0;SEARCHPATTERN=0;PREFETCH=1].as400table"

Wie bei allen meinen Versuchen bekam ich den Fehler (-7778) zurück.

Und jetzt weiss ich wirklich nicht mehr, was ich noch tun soll.

ratlos
frank

Fuerchau
08-07-10, 17:30
In VBA musst du dir die MSADO-Objekte als Verweise hinzufügen.
Dann kannst du mit Connection-, Command- und Recordset-Objecten die Daten lesen und in deine Tabellen schreiben.

Aber DSN's benötigst du nur zur Entwicklungszeit.
Wenn du eine Verknüpfungstabelle erstellst zieht sich Access automatisch die Verbindungsfolge in die Eigenschaften der Tabelle.

Du kannst dann ganz normale Anfügeabfragen erstellen und verwenden.

ambix
08-07-10, 18:39
Hi,

erstmal danke für die schnelle Antwort!
Ich habe mich ein bisschen in der MS Syntax verheddert, ich meinte nicht standalone VBA sondern Code innerhalb eines Access Moduls.

Was ich hier völlig problemlos hinbekomme, ist ein Recordset ohne DSN mit den benötigten Daten zu füllen und dann in einer Schleife für jeden einzelnen Satz ein AddNew in die Access Tabelle zu machen. Aber das dauert eeeeeewig!

Wenn ich aber z.B. das hier nutze:
DoCmd.RunSQL "SELECT * INTO AccessTable FROM [ODBC;DSN=as400dsn].as400lib.as400table"

sind die Sätze innerhalb von Sekunden drinne. Aber wie gesagt, DSN will ich ja gerade nicht...

leider immer noch ratlos
frank

Fuerchau
09-07-10, 08:02
Schau dir die Syntax des Connection-Strings genauer an:

Driver={DriverName};System=MySys;DBQ=MyLib;CMT=0; User=MyUser;Password=MyPass;

Wenn du eine Tabelle verknüpfst, kannst du dir die Verbindungsfolge in den Tabelleneigneschafte ansehen.

ambix
09-07-10, 13:01
Himmel, ich habs:

Es fehlte der Parameter MGDSN=0!
Das funktioniert jetzt einwandfrei:

DoCmd.RunSQL "SELECT * INTO AccessTable FROM [ODBC;Driver={iSeries Access ODBC Driver}; SYSTEM=as400ip; DBQ=as400lib; UID=user; PWD=pwd; MGDSN=0].as400table"

Das hat Nerven gekostet...


merci vielmals
frank