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

Schreibe einen Kommentar