Access VBA: Fehler bei der Deklaration der Typ der ein Datenbank-Objekt: benutzerdefinierter Typ nicht definiert
In Access 2010 VBA, wenn ich dieses sub:
sub test
Dim db
Dim rst
Set db = CurrentDb()
Set rst = db.OpenRecordset("select * from mytable")
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
dann zeigt es (in der "Sofortige"):
db: Database
rst: Recordset2
damit es funktioniert, und alle Bibliotheken richtig installiert sind (ADO zum Beispiel).
Ok, jetzt möchte ich erklären, explizit die Typen von Variablen, durch die Verwendung der Typen, die gezeigt wurden ("Datenbank" und "Recordset2"), so ändern Sie den sub auf diese Weise:
sub test
Dim db as Database ' explicitly
Dim rst as Recordset2 ' explicitly
Set db = CurrentDb()
Set rst = db.OpenRecordset("select * from mytable")
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
und wenn ich es laufen lasse, bekomme ich folgende Fehlermeldung bei der Zeile "Dim db as Database":
Compilation error:
User defined type is not defined
So verstehe ich, dass der Typ "Datenbank" ist nicht definiert (!). Warum?
Hinweis: ich habe auch versucht:
Dim db as ADO.Database ' explicitly
Dim rst as ADO.Recordset2 ' explicitly
und:
Dim db as ADODB.Database ' explicitly
Dim rst as ADODB.Recordset2 ' explicitly
und:
Dim db as DAO.Database ' explicitly
Dim rst as DAO.Recordset2 ' explicitly
und bekam die gleichen Fehler, mit allen von Ihnen. Wie ist es möglich? Warum funktioniert es, wenn ich nicht erklären, der Typ?
Bearbeiten: ich habe gerade entdeckt, dass der Zugang bietet auch ein ADODB.Connection-Objekt für die aktuelle Datenbank durch aufrufen von "CurrentProject.Verbindung". So kann ich ausdrücklich erklären:
sub test
Dim db As ADODB.Connection
Set db = CurrentProject.Connection ' Access gives an ADODB object too!
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.Open "select * from mytable", db
Debug.Print "db: " & TypeName(db)
Debug.Print "rst: " & TypeName(rst)
end sub
zeigt:
db: Connection
rst: Recordset
Also werde ich es verwenden, da ADO ist moderner als DAO.
InformationsquelleAutor freesoft | 2014-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, zu prüfen, "Referenzen" - Sie werden sehen, es gibt kein DAO-Bibliothek.
Dein erstes Beispiel funktioniert, weil die db-Variante geben. Und Zuordnung
stellt COM-Objekt von DAO.Datenbank in der db, und später TypeName bestätigt diese Datenbank.
Wenn Sie verwenden möchten
Müssen Sie Verweis-Bibliothek (Microsoft DAO zum Beispiel)
"Aktiviert" ist das falsche Wort hier, "Verwiesen" ist besser. Sie können verwenden, die COM-Bibliothek als COM-Bibliothek - CreateObject, GetObject oder empfangen Objekt als return-parameter. Aber wenn Sie wollen, um die Verwendung innerhalb von VBA - seine' definition geladen werden muss in VBA, das nennt man hier "Referenz".
Hmm, ich sehe, es ist ein bisschen schwierig 🙂 vielen Dank für Ihre Informationen. Trotzdem nutze ich die ADODB-alternative, die ich gefunden, als ich erklärte, auf dem "Edit:" Abschnitt von der Frage.
InformationsquelleAutor 4dmonster
Können Sie erklären, "db" als ein Objekt und alles andere ist gleich. also
Dim db As Object
InformationsquelleAutor AnonymousA