Un extrait de code très simple ici pose un problème très gênant. Il s'agit d'une section d'un sous-programme plus important, mais les seules informations pertinentes doivent être trouvées ici. I Obtenir une erreur 3420 "objet invalide ou non enfoncé" sur cette ligne: p> CurrentDb.CreateQueryDef
3 Réponses :
Vous obtenez cette erreur car l'objet QueryDef code> que vous créez n'a pas de
QueryDef CODE>, nous fournissons la propriété
nom code> en tant qu'argument de chaîne vide sur la méthode
CreateEquéry CODE>:
Set qdfNewHospital = db.CreateQueryDef
qdfNewHospital.Name = ""
Et si la question avec le même nom existe déjà dans la base de données? Vous devez supprimer une requête existante avant de la créer à nouveau.
@Maciejlos Objets de QueryDef temporaires (dont le nom est une chaîne vide) ne sont pas enregistrés dans la collection QueryDefS.
@NOW, la réponse est terminée;) Au fait: je savais ça;)
Pour ma requête SELECT, régler .Name = "" "lance" String de connexion non valide dans la requête transparente ". J'ai mis le code avec ... fin
@ user1175126 Veuillez <-href="http://stackoverflow.com/questions/ask"> Poser une nouvelle question y compris les détails pertinents de votre problème, y compris le code que vous essayez d'utiliser.
avec DAO, vous pouvez également le faire comme ceci:
Dim sqltext As String qdfNewHospital As DAO.QueryDef ' build the create querydef sql string sqltext = "INSERT INTO tblHospital (HospitalName)" & _ " VALUES ('" & hName & "')" ' now create a reusable stored query def On Error Resume Next With CurrentDb 'Delete the query if it exists .QueryDefs.Delete ("My_Query") 'Now set up the querydef Set qdfNewHospital = .CreateQueryDef ("My_Query", sqltext) .Close End With
Pour le mettre succinctement, j'avais le même problème.
NE PAS UTILISER DAO! Utilisez ADO à la place. Quelle version de MS Access?
@Maciejlos Re: "N'utilisez pas dao! Utilisez ADO à la place." I> - mal. Absolument faux.
@Gordthompson, existe-t-il une raison particulière d'utiliser DAO? Voir: PromoAccess.com/wiki/index.php/choose_between_dao_and_ado
@Maciejlos DAO continue d'être la méthode privilégiée d'interaction avec les objets de base de données d'accès des projets VBA dans l'accès lui-même. C'est pourquoi un nouveau projet d'accès VBA aura déjà une référence DAO définie. (Il y a des années, Microsoft a tenté de forcer les développeurs d'accès à adopter ADO, mais que cet effort a échoué et Microsoft s'est rendu à offrir DAO comme référence par défaut.)
Pour un, vous devez ajouter une bibliothèque de référence spécifique pour ADO qui peut ne pas être disponible pour tous les utilisateurs; Microsoft Ado pour DDL et Security
Merci aux gars de votre opinion, mais je dois être en désaccord. Bien sûr, DAO est toujours utilisé dans les bases de données MS Access, mais ADO I Smore Puissant dans mon Opnion. Certaines fonctionnalités de DAO sont toujours utiles, mais Dao est vraiment vieux. Je pense que cela pourrait être des arguments de tonnes d'utiliser ADO et DAO. Peut-être la prochaine fois?
@Maciejlos Re: "Dao est vraiment vieux." I> - Ace Dao a été mis à jour pour gérer de nouvelles fonctionnalités d'accès plus complètement que OLDEB ou ODBC. Par exemple, le seul moyen fiable d'insérer et d'extraire des documents à partir d'un champ code> de pièce jointe de code> dans une base de données d'accès se trouve via un objet Ace Dao
Field2 code> objet.
De plus, à partir de la page Maciejlos liée, "Bien que ADO soit censé remplacer DAO, Microsoft a depuis inversé la position et a créé DAO la Bibliothèque de données béniée d'accès. En outre, Microsoft a béni ADO.NET, qui est tout à fait différent. bibliothèque d'accès aux données avec peu en commun à ADO autres que les trois lettres. Ainsi, il est peu probable que ADO reçoive un développement actif. " I> SO tout le monde est libre de rejeter DAO sur le terrain que " est vraiment Ancien " I>, mais Microsoft ne l'a pas rejeté.