[VBA Access] reconnaissance d'une requête

cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006 - 5 avril 2006 à 12:24
cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006 - 5 avril 2006 à 15:05
Bonjour,
Mon programme a pour but de créer des requêtes access, seulement je souhaite que chaque nouvelle requête écrase l'ancienne. Il faut donc que je sache s'il existe déjà une requête du même nom, et si oui je la supprime. Comment puis-je faire une reconnaissance des requêtes existantes?

If ... Then
DoCmd.DeleteObject acQuery, "requête"
End If

Autrement (plutôt en plus) puis-je faire intervenir une boîte de dialogue qui alerte du remplacement de la 1re requête par le 2e, et qui propose de rentrer un nouveau de requête?

Merci d'avance

8 réponses

cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
5 avril 2006 à 12:55
Pour savoir si la requête existe, il faut parcourir la collection des requêtes de la base de données :
Function QryExist(sQryName As String) As Boolean
Dim qry As QueryDef
For Each qry In QueryDefs
If qry.Name=sQryName Then
QryExist=True
Exit For
End If
Next qry
End Function
0
cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006
5 avril 2006 à 13:42
Merci, mais on me demande "objet requis" pour la ligne :
"For Each qry In QueryDefs"
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
5 avril 2006 à 14:01
Il faut tout d'abord charger la bibliothèque Microsoft DAO dans les référencs. Pour celà (sous Access 2002) il faut créer un nouveau module, puis, dans le menu de l'editeur VBA d'access, ouvrir le menu "Outils" puis "Références", puis choisir "Microsoft DAO 3.6 Object Library". A partir de ce moment là, vous avez accès aux objets du Data Access Object.
0
cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006
5 avril 2006 à 14:30
Cette option est bien cochée, mais je suis sous Access 2003, ça peut jouer?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
5 avril 2006 à 14:39
C'est possible, mais, n'ayant jamais utilisé Access 2003, je ne suis pas en mesure de confirmer ou infirmer... Peut être faut'il utiliser le prédicat pour bien définir à quelle bibliothèque d'objets appartient l'objet QueryDef.

Dim db As DAO.Database,qry As DAO.QueryDef
Set db=CurrentDB
For Each qry In db.QueryDefs
... etc

Dans le cas où une autre bibliothèque d'objet comporterait des objets QueryDef ce qui provoquerait une confusion dans les références.
0
cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006
5 avril 2006 à 14:49
En fait ça a l'air de marcher, je n'ai pas trop compris qu'est-ce que j'ai fait qui a pu améliorer les choses... Mais je dois appeler cette fonction dans un if appartenant à un "Private Sub Commande0_Click()" et :

If QryExist = True Then
DoCmd.DeleteObject acQuery, "requête"
End If

il me dit "argument non facultatif". Comment dois-je appeler la fonction?
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
5 avril 2006 à 14:53
C'est If QryExist(NomRequete) Then DoCmd.DeleteObject acQuery, NomRequete

L'argument obligatoire qu'il cherche, c'est le Nom de la reqête dont on veut vérifier la présence ou non.
0
cs_observatoire Messages postés 75 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 23 août 2006
5 avril 2006 à 15:05
Merci bien. ça marche
et j'ai effectivement eu besoin de :
Dim db As DAO.Database,qry As DAO.QueryDef
Set db=CurrentDB
For Each qry In db.QueryDefs...
car il a fini par me resignaler l'erreur du début.
0
Rejoignez-nous