J'ai une requête plutôt volumineuse, qui regroupe plus d'une douzaine de tables et je souhaite extraire des enregistrements en fonction d'un champ id ( par exemple : between nStartID and nEndID
).
J'ai créé deux paramètres et les ai testés comme critères et ils fonctionnent bien.
Le problème est que je dois exécuter une requête d’insertion à partir de cette requête principale et avoir besoin des paramètres là où ils se trouvent dans la requête principale. Donc, je dois lui passer des paramètres par programme.
Quelqu'un sait-il comment cela peut être fait?
Merci.
Je viens de tester cela et cela fonctionne dans Access 2010.
Supposons que vous ayez une requête SELECT avec des paramètres:
PARAMETERS startID Long, endID Long;
SELECT Members.*
FROM Members
WHERE (((Members.memberID) Between [startID] And [endID]));
Vous exécutez cette requête de manière interactive et vous invite à indiquer [startID] et [endID]. Cela fonctionne, vous enregistrez donc la requête en tant que [MemberSubset].
Maintenant, vous créez une requête UPDATE basée sur cette requête:
UPDATE Members SET Members.age = [age]+1
WHERE (((Members.memberID) In (SELECT memberID FROM [MemberSubset])));
Vous exécutez cette requête de manière interactive et vous êtes invité à entrer [startID] et [endID] et cela fonctionne bien. Vous devez donc l'enregistrer sous le nom [MemberSubsetUpdate].
Vous pouvez exécuter [MemberSubsetUpdate] à partir de code VBA en spécifiant les valeurs [startID] et [endID] en tant que paramètres de [MemberSubsetUpdate], même s’ils sont en réalité des paramètres de [MemberSubset]. Ces valeurs de paramètre "se répercutent" là où elles sont nécessaires, et la requête fonctionne sans intervention humaine:
Sub paramTest()
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("MemberSubsetUpdate")
qdf!startID = 1 ' specify
qdf!endID = 2 ' parameters
qdf.Execute
Set qdf = Nothing
End Sub
Essayez d’utiliser les QueryDefs. Créez la requête avec des paramètres. Ensuite, utilisez quelque chose comme ceci:
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("Your Query Name")
qdf.Parameters("Parameter 1").Value = "Parameter Value"
qdf.Parameters("Parameter 2").Value = "Parameter Value"
qdf.Execute
qdf.Close
Set qdf = Nothing
Set dbs = Nothing
Merci beaucoup pour les informations sur l'utilisation de la collection QueryDefs! Je m'interroge depuis un moment sur ce sujet.
Je l'ai fait d'une manière différente, sans utiliser VBA, en utilisant une table contenant les paramètres de requête.
E.g: SELECT a_table.a_field FROM QueryParameters, a_table WHERE a_table.a_field ENTRE DE QueryParameters.a_field_min ET QueryParameters.a_field_max
Où QueryParameters est une table avec deux champs, a_field_min et a_field_max
Il peut même être utilisé avec GROUP BY, si vous incluez les champs de paramètre de requête dans la clause GROUP BY et l'opérateur FIRST sur les champs de paramètre dans la clause HAVING.
Vous pouvez également utiliser TempVars - notez '!' la syntaxe est essentielle