cs_observatoire
Messages postés75Date d'inscriptionvendredi 10 mars 2006StatutMembreDernière intervention23 août 2006
-
5 avril 2006 à 12:24
cs_observatoire
Messages postés75Date d'inscriptionvendredi 10 mars 2006StatutMembreDernière intervention23 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?
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 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
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 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.
cs_jperre
Messages postés268Date d'inscriptionlundi 9 janvier 2006StatutMembreDernière intervention19 janvier 20172 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.
cs_observatoire
Messages postés75Date d'inscriptionvendredi 10 mars 2006StatutMembreDernière intervention23 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?
cs_observatoire
Messages postés75Date d'inscriptionvendredi 10 mars 2006StatutMembreDernière intervention23 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.