Je travaille avec une assez grande base de données d'informations. J'ai besoin d'utiliser un ensemble distinct de valeurs dans une requête sauvegardée comme paramètre dans la clause 'where' pour une autre requête. Quelle est la meilleure façon de parcourir l'ensemble de résultats de valeurs distinctes? Je suis relativement nouveau à Access et VBA.Access 2007 itérer via une requête sauvegardée
Répondre
Est-ce une requête passthrough ou une autre requête Access? Si passthrough, utilisez VBA pour remplacer la propriété .sql de la deuxième requête par les valeurs de la première requête. Si Access, vous pouvez probablement utiliser une jointure.
@ La réponse de Beth est probablement la meilleure et si vous souhaitez poster quelques détails de vos tables et requêtes, je suis sûr qu'une réponse plus détaillée peut être fournie, cependant, si vous avez besoin de parcourir les résultats de la requête autre que d'obtenir un second jeu de résultats, vous pouvez utiliser un jeu d'enregistrements. En VBA:
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim sSQL As String
''You open an SQL string, a table, or a query as a recordset
Set rs = CurrentDB.OpenRecordset("QueryName")
Do While Not rs.EOF
sSQL= "SELECT Some, Fields FROM ATable WHERE ID = " & rs!NumericID
Set rs2 = CurrentDB.OpenRecordset(sSQL)
''Now what?
rs.MoveNext
Loop
Je ne comprends peut-être pas la question, parce que je l'interprète complètement différemment des autres réponses. Il me semble que les autres ont répondu en supposant que "Quelle est la meilleure façon d'itérer à travers le jeu de résultats de valeurs distinctes" est la partie clé, où je me concentre sur "Je dois utiliser un ensemble distinct de valeurs dans une requête enregistrée en tant que paramètre dans la clause 'where' pour une autre requête ".
Il y a deux façons d'aborder ce:
la manière standard d'accès: sauver l'autre requête, l'ajouter à la première requête et rejoindre sur le champ que vous êtes sur le filtrage.
utilisez la clause IN comme sous-requête.
Supposons que votre requête principale est:
SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
FROM tblBook
... et que vous souhaitez filtrer un ensemble d'auteurs utilisant cette requête:
SELECT tblAuthor.AuthorID
FROM tblAuthor
WHERE tblAuthor.BirthYear < 1900
Vous pouvez enregistrer cette dernière requête comme, dites "qryAuthorsBefore1900" et ensuite l'utiliser dans une jointure dans la première requête:
SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
FROM tblBook INNER JOIN qryAuthorsBefore1900 ON tblBook.AuthorID = qryAuthorsBefore1900.AuthorID
C'est la méthode 1.
Méthode 2 serait:
SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
FROM tblBook
WHERE tblBook.AuthorID IN (SELECT tblAuthor.AuthorID FROM tblAuthor WHERE tblAuthor.BirthYear < 1900)
Maintenant, les deux sont inutiles - vous pouvez faire tout cela sans sous-requête ou d'un QueryDef sauvé:
SELECT tblBook.BookID, tblBook.AuthorID, tblBook.Title
FROM tblBook INNER JOIN tblAuthor ON tblBook.AuthorID = tblAuthor.AuthorID
WHERE tblAuthor.BirthYear < 1900
Cet ensemble de résultats devrait être modifiable. Toutes les requêtes ci-dessus peuvent être créées en utilisant la grille Query By Example standard, pas besoin de plonger dans la vue SQL (sauf pour copier le SQL de la sous-requête, si vous décidez de suivre cette route). Mais, bien sûr, j'ai peut-être complètement mal interprété la question entière.
- 1. Access 2007 Nest requête parameterful
- 2. Access 2007 Query de requête vide
- 3. Itérer via "liste liée" dans une requête SQL?
- 4. Alias une légende dans Access 2007
- 5. Lien une table ODBC dans Access 2007
- 6. Utilisation de NT login dans le cadre d'une requête SQL exécutée via VBA dans Access 2007
- 7. Hibernate avec Access 2007
- 8. Evénements MS Access 2007
- 9. Access 2007 Use VBA
- 10. Itérer via un IList
- 11. access 2007 locked
- 12. ms-access 2007 .exe
- 13. Microsoft Access 2007 Connection
- 14. Itérer via un NSArray
- 15. .NET Access Automation avec Access 2007 Runtime
- 16. Liste déroulante dans la requête de paramètre Access 2007
- 17. Microsoft Access 2007 - Afficher la requête utilisée dans le rapport?
- 18. Événement OnKeyUp dans Access 2007
- 19. Regroupement de rapports Access 2007
- 20. Comment modifier la requête du fichier MS Access 97 à l'aide de MS Access 2007
- 21. Connexion ASP.net avec Access 2007
- 22. Persuader Access 2007 pour utiliser une connexion .UDL fichier/oledb?
- 23. xml en ms access 2007
- 24. Itérer via DataRepeater (VB.Net PowerPack)
- 25. Aperçu PDF dans Access 2007?
- 26. Boutons personnalisés dans Access 2007
- 27. MySQL à MS ACCESS 2007?
- 28. Période hebdomadaire dans Access 2007
- 29. options d'accès ms access 2007
- 30. Une requête dans Ms-access
Qu'est-ce que le passthrough a à voir avec cela?Cela s'applique uniquement à une base de données de serveur, et il n'y a aucune mention de quelque chose dans la question autre qu'Access lui-même. –
Eh bien, comme vous l'avez mentionné dans votre méthode 1, si ce n'est pas une requête pt, ils devraient être en mesure d'utiliser une jointure à la place de VBA. S'il souhaite parcourir un ensemble de résultats, il doit utiliser VBA, mais je l'ai fait uniquement pour remplacer les variables dans les requêtes pt. Je ne vois vraiment pas assez d'informations pour bien comprendre ce qu'il essaie de faire. – Beth