OVH Cloud OVH Cloud

Créer une requête par une macro ou un module

11 réponses
Avatar
Chevrot
Bonjour à tous et bonne année,

Je ne connais pas bien Access, et vous suis reconnaisant par avance de
m'aider sur le problkème suivant:

Je souhaite, par une macro ou un module, créer et enregistrer soius le nom
"A 1250" une requête identique à une requête existante "A" , mais dont la
valeur du champ "ETA-NUM" est 1250.

Merci d'avance

Chevrot

1 réponse

1 2
Avatar
Eric
Bonjour,
...
Par contre, en ce qui concerne la création de plusieurs requêtes dans
lesquelles seule la valeur du champ est différente, je coince sur ("Select
distinct NUM_ETAT from [SOI A]"). <from> n'est pas reconnu.


Je ne vois pas dans le SELECT ce qui cloche !
Tu as bien un caractère de soulignement entre NUM et ETAT ?
Essaies avec SELECT DISTINCT [NUM_ETAT] FROM [SOI A];
et même copies cette instruction dans la fenêtre SQL pour tester

Enfin, ma question était aussi plus généralement: est il possible de créer à
la suite des <maprocédure> différentes (pas uniquement par la valeur du
critère, mais par la requête de référence (<A> dans l'exemple) et par le nom
du champ)?



Pas sur d'avoir bien compris mais la procédure donnée te montre
comment créer automatiquement les requêtes à partir de la
requête A pour toutes les valeurs de NUM_ETAT. Il peut en être
de même avec les autres champs. Il suffira d'adapter cette
procédure, de la renommer et dans une procédure plus globale
d'appeler ces différentes procédures. Si tu veux généraliser
pour tous les champs ou presque qui peuvent servir de critère
et n'avoir qu'une seule procédure à lancer,
il faudrait remplir un tableau à 2 colonnes, 1 pour le nom de
la table fournissant le champ et 1 pour le nom du champ.
Une fois le tableau renseigné, la procédure devient :

Dim K as Long, Tableau(nbligne,1)
' par défaut les indices commencent à 0
' ici remplir le tableau
DoCmd.Hourglass True
For k=LBound(Tableau) to UBound(Tableau)
Set rs = db.OpenRecordset("Select distinct [" & tableau(k, 1) &
"] from [" & tableau(k, 0) & "]")
' Pour chaque champ et pour chaque valeur on crée une requête
While Not rs.EOF
' on recupère la valeur du champ
critere = rs(0)
' Pour enlever le ; à la fin de l'instruction SQL
SQL = Left(db.QueryDefs("A").SQL,
InStrRev(db.QueryDefs("A").SQL, ";") - 1)
' on définit la clause WHERE de la nouvelle requête
SQL = SQL & " WHERE [" & tableau(k, 1) & "]='" & critere & "'"
'Crée la requête et l'ajoute à la collection
Set rq = db.CreateQueryDef("A " & critere, SQL)
rs.MoveNext
Wend
Next k
DoCmd.Hourglass False
suite inchangée

PS1: les requêtes créées le sont avec un critère d'égalité
PS2: Les contenus des champs ne doivent pas comporter de carcatères
spéciaux comme le . ou ' sinon faudra faire des traitements supplémentaires

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

1 2