View Full Version : AS400 ODBC-Anmeldung von Access per VBA
Du solltest das EXECUTE auf die zuvor geöffnete CONNECTION ausführen und nicht
auf das CURRENTDB-Objekt !
Gruss, Matz
Da muss ich Matz allerdings zustimmen.
ADO und DAO lassen sich nicht so verbinden.
DAO verwendet hierzu eine eigene Verbindung, das Verbinden auf ADO hat keine Auswirkung auf DAO.
Dies hat allerdings nichts mit dem Benutzernamen in der ADO-Verbindung zu tun, sondern beim Zugriff per DAO ist eine erneute Anmeldung erforderlich.
In deiner CurrentDB ist wahrscheinlich eine verknüpfte Tabelle, die einen eigenen Connection-String enthält (Eigenschaften der Tabelle).
Deine separate Anmeldung mittels ADO bringt also nichts, selbst wenn der Aufruf an sich funktioniert.
otto-mueller
25-05-04, 13:49
Da muss ich Matz allerdings zustimmen.
ADO und DAO lassen sich nicht so verbinden.
DAO verwendet hierzu eine eigene Verbindung, das Verbinden auf ADO hat keine Auswirkung auf DAO.
Dies hat allerdings nichts mit dem Benutzernamen in der ADO-Verbindung zu tun, sondern beim Zugriff per DAO ist eine erneute Anmeldung erforderlich.
In deiner CurrentDB ist wahrscheinlich eine verknüpfte Tabelle, die einen eigenen Connection-String enthält (Eigenschaften der Tabelle).
Deine separate Anmeldung mittels ADO bringt also nichts, selbst wenn der Aufruf an sich funktioniert.
Hallo allerseits,
das hatte ich auch gedacht, daß Execute uaf Connection ausgeführt werden sollte und das habe ich auch gerade gemacht. Es wird zwar keine Fehlermeldung beim ausführen von
conn.Execute SQLStrausgegeben, aber es werden auch keine Änderungen in der DB2-Datenbank vorgenommen - sprich es werden keine neue Datensätze eingefügt
Insert Into Bibliothek.Tabelle Values ('Otto Müller', '040101', '041231', 'Summe der Fehlzeiten');
DELETE-Anweisung geht überhaupt nicht, weder wenn ich currentdb.execute nehme noch wenn ich conn.execute nehme.
Woran kann es denn noch liegen?? :confused:
Danke nochmal
Gruß
Otto
otto-mueller
25-05-04, 14:50
Hallo nochmal,
den Fehler konnte ich lokalisieren und zwar lag es an das Semikolon am Ende von INSERT und DELETE :confused:
Vielen Dank für die SUPER-Hilfe.
Viele Grüße
Otto
Wenn du über CurrentDB auf die Tabellen zugreifst, wird die Access-Syntax von SQL verwendet, die nach einer Übersetzung in die ODBC-Syntax an den Treiber weitergegeben wird.
Wenn du direkt über das Connection-Objekt zugreifst, wird direkt die AS/400-Syntax verwendet, dies entspricht in Access einem SQL-Passthru.
Wenn du mit ADO statt DAO arbeitest, ändern sich ein paar Kleinigkeiten:
DAO.Database => ADODB.Connection
DAO.QueryDef => ADODB.Command
Recordset, Parameter und Field-Objekte gibt es weiterhin mit ein paar erweiterten bzw. geänderten Eigenschaften.
Bei wiederholten SQL-Statements mit verschiedenen Werten lohnen sich "Parameter":
dim myCnn as new ADODB.Connection
dim myCmd as new ADODB.Command
with myCmd
.Commandtext = "Insert Into Bibliothek.Tabelle Values (?, ?, ?, ?)"
.Prepared = true
set .ActiveConnection = myCnn
.execute , Array('Otto Müller', '040101', '041231', 'Summe der Fehlzeiten'), adExecuteNorecords
end with
Mit dem Array() wird der 1. Wert dem 1. Fragezeichen zugeordnet, der 2. Wert dem 2. Fragezeichen und so weiter.
Der große Vorteil liegt in der Vereinfachung der Verwendung, da der SQL-Befehl nicht immer neu zusammengesetzt werden muss (Dezimalpunkt/-komma, Hochkomma in Zeichenfolgen, usw.).
otto-mueller
25-05-04, 23:06
Hallo,
vielen Dank für die detailierte Hilfe. Das hat mich sehr voran gebracht.
Ich werde den letzten Ansatz auch probieren und melde mich dann.
Gruß
Otto