Access VBA: Erreur lors de la déclaration du type d'un objet de Base de données: type défini par l'Utilisateur n'est pas défini
Dans Access 2010 VBA, si je lance ce sujet:
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
puis il montre (dans le "Immédiats" du panneau):
db: Database
rst: Recordset2
de sorte qu'il fonctionne, et de toutes les bibliothèques sont installées correctement (ADO par exemple).
Ok, maintenant, je veux déclarer explicitement les types de variables, en utilisant les types qui ont été montré ("Base de données" et "Recordset2"), j'ai donc modifier le sous de cette façon:
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
et quand je le lance, j'obtiens l'erreur suivante à la ligne "Dim db as Database":
Compilation error:
User defined type is not defined
Donc, je comprends que le type "Base de données" n'est pas définie (!). Pourquoi?
Remarque: j'ai aussi essayé:
Dim db as ADO.Database ' explicitly
Dim rst as ADO.Recordset2 ' explicitly
et:
Dim db as ADODB.Database ' explicitly
Dim rst as ADODB.Recordset2 ' explicitly
et:
Dim db as DAO.Database ' explicitly
Dim rst as DAO.Recordset2 ' explicitly
et a obtenu le même erreur qu'avec eux. Comment est-il possible? Pourquoi ça fonctionne si je n'ai pas déclarer le type?
Modifier: je viens de découvrir que l'Accès propose également une ADODB.Objet de connexion pour la base de données actuelle, en appelant à "CurrentProject.Connexion". Donc, je peux déclarer explicitement:
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
qui montre:
db: Connection
rst: Recordset
Donc je vais l'utiliser car ADO est plus moderne que DAO.
OriginalL'auteur freesoft | 2014-02-24
Vous devez vous connecter pour publier un commentaire.
Essayez de cocher la case "Références" - vous allez voir, il n'existe pas de bibliothèque de DAO.
Votre premier exemple fonctionne parce que db est de type Variant. D'affectation et de
met COM objet DAO.Base de données en db, et, plus tard, TypeName confirme ce est de la Base de données.
Si vous souhaitez utiliser
Vous avez de Référence de la bibliothèque appropriée (Microsoft DAO par exemple)
"Activé" est un mot mal ici, "Référence", c'est mieux. Vous pouvez utiliser cette bibliothèque COM COM de la bibliothèque - CreateObject, GetObject ou de recevoir de l'Objet en tant que paramètre de retour. Mais si vous voulez utiliser à l'intérieur VBA - sa définition doit être chargé dans VBA, qu'on appelle ici la "référence".
Hmm, je vois, c'est un peu difficile 🙂 Merci pour votre information. De toute façon, je vais utiliser le ADODB alternative que j'ai trouvé, comme je l'ai expliqué à la "Edit:" la section de la question.
OriginalL'auteur 4dmonster
Vous pouvez déclarer "db" comme un objet, et tout le reste est le même. c'est à dire
Dim db as Object
OriginalL'auteur AnonymousA