PDA

Vollständige Version anzeigen : Access/Mysql/Ado-> Element in dieser Auflistung nicht gefunden


steffenreu
27.09.2005, 13:36
Hallo,

ich möchte auf eine MySLQ-Tabelle zugreifen.

Der Code wurde schon mehrfach gepostet:
Dim i As Integer
Dim dbs As DAO.Database
Dim strDB As String, strPort As String, strIP As String

strDB = "dbase"
strIP = "192.168.0.1" 'IP-Adresse des Servers
strPort = "3306" 'benutzter Port
Const MAXTABLES = 1 'Anzahl der Tabellen in der mySQL-DB
Static Tables(MAXTABLES) As String

Tables(0) = "table1"
Tables(1) = "table2"
Set dbs = CurrentDb
For i = 0 To MAXTABLES
If Tables(i) <> "" Then
dbs.TableDefs(Tables(i)).Connect = _
"ODBC;DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & strIP & ";" & _
"PORT=" & strPort & ";" & _
"DATABASE=" & strDB & ";USER=USER;" & _
"PASSWORD=XXX;Option=3"
dbs.TableDefs(Tables(i)).RefreshLink
End If
Next i

Beim Aufrufen erhalte ich immer die Meldung: Laufzeitfehler 3256, Element in dieser Auflistung nicht gefunden mit Verweis auf die Zeile „dbs.TableDefs(Tables(i)).Connect ...“

Komme da nicht weiter. Woran lieg das?

molnar
27.09.2005, 13:47
Es scheint keine Tabelle mit Namen "table1" oder "table2" zu geben.
Schreibfehler?

Gruß,
Reinhard

steffenreu
27.09.2005, 14:03
Nein. Habe eben noch mal die Zugangsdaten überprüft. passen. Tabellen existieren. Wird die Kommunikation irgendwo mitgeloggt?

<- habe grad die IP auf eine externe IP geändert. BEVOR er überhaupt mit dem Server in Verbindung tritt, erscheint diese Fehlermeldung...

molnar
27.09.2005, 14:28
Da dbs die aktuelle Datenbank (in der sich auch Dein Code befiindet) ist, müssen die Tabellen darin als Link auf eine andere DB (z.B. dbase) enthalten sein, nicht nur in dbase. Falls diese Links noch nicht existieren, mußt Du sie erst anlegen, bevor der Code laufen kann.

Reinhard

steffenreu
27.09.2005, 14:44
Hmm. Aber ich will doch genau das mit VBA-Code machen...?
dbs=CurrentDb
Und der CurrentDb soll eine Verknüpfung zur MySQL Datenbank hinzugefügt werden.
Dadurch, das der Name "adressen" vorgegeben ist, sollte ja eigentlich klar sein, wie der verknüpfte Tabellenname heissen soll.

Wie lege ich per VBA-Code so eine „leere“ Tabelle vorher an?

Nachtrag:
Ich habe nun unter Datei ->Externe Daten -> usw die beiden Verbindungen manuell hergestellt. Nun meckert das Script auch nicht mehr.
Aber die beiden Tabellen stehen nun immer mit drin. <- Scheinbar wird auch nur eine Verbindung aufgebaut, wenn man die Tabellen „benutzt“ -> und nicht schon beim Start der .mdb

Mein Wunsch ist es aber die Tabellen per VBA zu erstellen, benutzen und dann wieder per VBA zu löschen.

Hier der Code, der dann kommen sollte, wenn die Verknüpfungen nicht mehr benötigt werden.
Dim i

Const MAXTABLES = 10
Dim strTabelle As String

Static Tables(MAXTABLES) As String

Tables(0) = "Arbeitnehmer"
Tables(1) = "ActiveUser"
Tables(2) = "Kunden"
...


For i = 0 To 10
strTabelle = Tables(i)
DoCmd.DeleteObject acTable, strTabelle
Next i

Ist soetwas möglich, oder müssen immer die verknüpften Tabellen „anwesend“ sein?

Nochmals Nachtrag:
Das Löschscript funktioniert! Beide verknüpften Tabellen verschwinden! Aber danach erscheint wieder die Fehlermeldung (wenn ich die Tabellen wieder per Script verknüpfen will)... und ich muß manuell die Tabellen hinzufügen (das was das Script eigentlich machen sollte)

steffenreu
28.09.2005, 07:11
Nein. Hänge fest. Das Script muß das auch alleine schaffen, die Tabellen zu verknüpfen, ansonsten hat es ja keinen Sinn, wenn ich sowieso immer erst die Tabellen manuell anlegen muß.

molnar
28.09.2005, 08:39
Das Anlegen einer neuen Tabelle funktioniert so:
Dim TD As Object
Dim DB As Object
Set DB = CurrentDb
Set TD = DB.CreateTableDef("lokaleTabelle")
TD.Connect = "ODBC;DRIVER=..."
TD.SourceTableName = "gelinkteTabelle"
DB.TableDefs.Append TD
TD.RefreshLink
Set TD = Nothing
DB.Close
Set DB = Nothing

Reinhard