Lancer une requête SQL sur des Tables dans du code VBA
Résolu/Fermé
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
-
3 juil. 2013 à 09:58
Random Dude Messages postés 24 Date d'inscription mercredi 3 juillet 2013 Statut Membre Dernière intervention 6 août 2013 - 9 juil. 2013 à 15:41
Random Dude Messages postés 24 Date d'inscription mercredi 3 juillet 2013 Statut Membre Dernière intervention 6 août 2013 - 9 juil. 2013 à 15:41
A voir également:
- Lancer une requête SQL sur des Tables dans du code VBA
- Voici du code ascii : - Guide
- Comment faire une table des matières sur word - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
5 réponses
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
3 juil. 2013 à 11:18
3 juil. 2013 à 11:18
Je suis de retour ! bon, avec quelques recherches approfondies, et en posant les bonnes questions à google, j'ai pu tomber sur une explication qui résout en partie mon problème :
je n'arrive toujours pas à créer de Table contenant mon résultat, mais j'arrive à l'afficher dans une zone de liste dans mon formulaire.
J'ai pu voir également un code qui permettrait d'afficher le résultat dans une Table mais il ne fonctionne toujours pas : voici les avancées :
Code à ajouter pour afficher le résultat dans une table :
Dim RS As DAO.Recordset
SQL= (" blabla bla ")
Set RS = CurrentDb.OpenRecordset(SQL)
Voilà il reste une ligne de code à ajouter permettant d'afficher le résultat dans une table.
J'utilisais avant le DoCmd.RunSQL mais il parait qu'on ne l'utilise que pour manipuler des données, pas un simple SELECT
Maintenant, l'autre piste que j'ai exploité c'est l'affichage dans une zone de liste du formulaire :
ma zone de liste d'appelle donc " affiche_recherche "
affiche_recherche.Enabled = True
Me.affiche_recherche.RowSource = SQL
Me.affiche_recherche.Requery
Voilà, c'est un début de solution mais vraiment pas pratique, la largeur des colonnes est limitées, et la sélection du texte peu pratique ....
J'aimerais vraiment afficher le résultat dans une Table
merci de vos réponses
je n'arrive toujours pas à créer de Table contenant mon résultat, mais j'arrive à l'afficher dans une zone de liste dans mon formulaire.
J'ai pu voir également un code qui permettrait d'afficher le résultat dans une Table mais il ne fonctionne toujours pas : voici les avancées :
Code à ajouter pour afficher le résultat dans une table :
Dim RS As DAO.Recordset
SQL= (" blabla bla ")
Set RS = CurrentDb.OpenRecordset(SQL)
Voilà il reste une ligne de code à ajouter permettant d'afficher le résultat dans une table.
J'utilisais avant le DoCmd.RunSQL mais il parait qu'on ne l'utilise que pour manipuler des données, pas un simple SELECT
Maintenant, l'autre piste que j'ai exploité c'est l'affichage dans une zone de liste du formulaire :
ma zone de liste d'appelle donc " affiche_recherche "
affiche_recherche.Enabled = True
Me.affiche_recherche.RowSource = SQL
Me.affiche_recherche.Requery
Voilà, c'est un début de solution mais vraiment pas pratique, la largeur des colonnes est limitées, et la sélection du texte peu pratique ....
J'aimerais vraiment afficher le résultat dans une Table
merci de vos réponses
Jean_Jacques
Messages postés
1040
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
1 août 2014
112
4 juil. 2013 à 09:07
4 juil. 2013 à 09:07
Bonjour Random Dude,
Le site https://access.developpez.com/ est un bon support pour aborder Access et ses particularités...
https://access.developpez.com/faq/?page=SQL
Cordialement
Le site https://access.developpez.com/ est un bon support pour aborder Access et ses particularités...
https://access.developpez.com/faq/?page=SQL
Cordialement
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
4 juil. 2013 à 09:44
4 juil. 2013 à 09:44
Merci Jean_Jacques,
je m'étais effectivement également inscrit sur developpez.com, où j'avais posé la même question ;)
merci pour ta réponse ;)
je m'étais effectivement également inscrit sur developpez.com, où j'avais posé la même question ;)
merci pour ta réponse ;)
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
8 juil. 2013 à 15:55
8 juil. 2013 à 15:55
Re ! ^^
Je viens juste pour préciser que malgré mon inscription sur développez.com, je n'ai toujours pas trouvé de réponse, au cas où ça intéresserait quelqu'un :P
Le sujet n'est pas clos quoi ^^
Je viens juste pour préciser que malgré mon inscription sur développez.com, je n'ai toujours pas trouvé de réponse, au cas où ça intéresserait quelqu'un :P
Le sujet n'est pas clos quoi ^^
blux
Messages postés
26527
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
9 juil. 2013 à 11:13
9 juil. 2013 à 11:13
Salut,
je n'ai pas tout compris, mais on ne peut pas afficher un résultat dans une 'table'. La table est un objet de base de donnée bien spécifique.
Par contre, on peut afficher le résultat d'une requête sélection dans un formulaire de type 'table' (celui qu'on voit habituellement par défaut)... Mais il faut que la requête existe déjà (il est toutefois possible de la créer en dynamique via VBA).
je n'ai pas tout compris, mais on ne peut pas afficher un résultat dans une 'table'. La table est un objet de base de donnée bien spécifique.
Par contre, on peut afficher le résultat d'une requête sélection dans un formulaire de type 'table' (celui qu'on voit habituellement par défaut)... Mais il faut que la requête existe déjà (il est toutefois possible de la créer en dynamique via VBA).
DoCmd.OpenQuery "Requête1"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
9 juil. 2013 à 11:58
9 juil. 2013 à 11:58
Bonjour Blux !
et merci de ta réponse ;)
Alors je vais essayer d'être un peu plus clair, et merci de tes précisions sur les Tables ^^
Sous Access tout d'abord : dans l'onglet "Tous les objets Access" (que l'on peut afficher sur la gauche lorsque l'on veut créer un formulaire ou autre) peuvent figurer plusieurs choses dont : les "Tables" , les "Requêtes", les "Formulaires" et je suppose qu'il existe encore quelques autres objets auxquels on ne s'intéressera pas ici.
l'onglet "Requête" permet de créer une requête sans le code, en reliant différents champs de plusieurs Tables, et affiche lorsqu'on la lance le résultat dans un tableau très fortement similaire a celui d'une Table.
Ce qui m'intéresse ici, ce n'est pas cette requête là, mais une requête codée en SQL, c'est à dire dynamiquement, depuis le code VBA.
lorsque celle-ci est codée et incluse dans le code VBA sous cette forme :
j'aimerais comme tu le dis, afficher le résultat dans un formulaire de type "Table".
Je suppose que la commande que tu proposes permet de lancer une requête déjà existante et créée dans les objets Access.
j'aimerais que me code fasse tout : contienne la requête codée, et puisse afficher le résultat.
C'est donc bien cette partie " en dynamique" qui m'intéresse et que j'aimerais que tu développes si possible ;)
merci beaucoup !
et merci de ta réponse ;)
Alors je vais essayer d'être un peu plus clair, et merci de tes précisions sur les Tables ^^
Sous Access tout d'abord : dans l'onglet "Tous les objets Access" (que l'on peut afficher sur la gauche lorsque l'on veut créer un formulaire ou autre) peuvent figurer plusieurs choses dont : les "Tables" , les "Requêtes", les "Formulaires" et je suppose qu'il existe encore quelques autres objets auxquels on ne s'intéressera pas ici.
l'onglet "Requête" permet de créer une requête sans le code, en reliant différents champs de plusieurs Tables, et affiche lorsqu'on la lance le résultat dans un tableau très fortement similaire a celui d'une Table.
Ce qui m'intéresse ici, ce n'est pas cette requête là, mais une requête codée en SQL, c'est à dire dynamiquement, depuis le code VBA.
lorsque celle-ci est codée et incluse dans le code VBA sous cette forme :
Dim SQL As String SQL = "SELECT ..."
j'aimerais comme tu le dis, afficher le résultat dans un formulaire de type "Table".
Je suppose que la commande que tu proposes permet de lancer une requête déjà existante et créée dans les objets Access.
j'aimerais que me code fasse tout : contienne la requête codée, et puisse afficher le résultat.
C'est donc bien cette partie " en dynamique" qui m'intéresse et que j'aimerais que tu développes si possible ;)
merci beaucoup !
blux
Messages postés
26527
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
9 juil. 2013 à 12:43
9 juil. 2013 à 12:43
Tiens, plutôt que de retaper tout le code, je te propose de reprendre l'exemple donné ici.
Si ça coince, n'hésite pas à demander conseil...
Si ça coince, n'hésite pas à demander conseil...
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
9 juil. 2013 à 13:34
9 juil. 2013 à 13:34
Merci ;)
Alors je viens d'essayer en adaptant le code à mon cas, et le compilo m'affiche : "Trop peu de paramètres. 1 attendu "
pour cette ligne :
SQL2 étant une string qui contient une requête.
Alors après quelque recherches, il me semble qu'il s'agit d'un manque de déclaration d'une Table dans le code :
il me semble que ces lignes :
ne suffisent pas à déclarer que l'on va utiliser des Tables présentes dans la base de données utilisée pour le formulaire.
Le " 1 attendu " était un " 2 attendu" quand j'utilisais 2 Tables différentes dans ma requête.
Il me semble évident que les Tables concernées ne sont donc pas correctement déclarée dans le code.
Peux-tu m'éclairer à ce sujet ?
Pour plus de clarté : voici le code utilisé :
Voilà donc SQL2 contient une requête extrêmement basique sur une seule Table. Je ne sais pas comment déclarer l'utilisation de cette Table dans le code.
merci de tes lumières ;)
Alors je viens d'essayer en adaptant le code à mon cas, et le compilo m'affiche : "Trop peu de paramètres. 1 attendu "
pour cette ligne :
Set rs = dbs.OpenRecordset(SQL2, dbOpenSnapshot)
SQL2 étant une string qui contient une requête.
Alors après quelque recherches, il me semble qu'il s'agit d'un manque de déclaration d'une Table dans le code :
il me semble que ces lignes :
Dim dbs As Database Set dbs = CurrentDb()
ne suffisent pas à déclarer que l'on va utiliser des Tables présentes dans la base de données utilisée pour le formulaire.
Le " 1 attendu " était un " 2 attendu" quand j'utilisais 2 Tables différentes dans ma requête.
Il me semble évident que les Tables concernées ne sont donc pas correctement déclarée dans le code.
Peux-tu m'éclairer à ce sujet ?
Pour plus de clarté : voici le code utilisé :
Private Sub Étiquette1_Click() Dim SQL2 As String SQL2 = "SELECT ..." Dim dbs As Database Dim rs As Recordset Dim qdf As QueryDef Set dbs = CurrentDb() Set rs = dbs.OpenRecordset(SQL2, dbOpenSnapshot) With dbs Set qdf = .CreateQueryDef("Ecarts", SQL) DoCmd.OpenQuery "Ecarts" .QueryDefs.Delete "Ecarts" End With dbs.Close qdf.Close End Sub
Voilà donc SQL2 contient une requête extrêmement basique sur une seule Table. Je ne sais pas comment déclarer l'utilisation de cette Table dans le code.
merci de tes lumières ;)
Random Dude
Messages postés
24
Date d'inscription
mercredi 3 juillet 2013
Statut
Membre
Dernière intervention
6 août 2013
9 juil. 2013 à 13:35
9 juil. 2013 à 13:35
Merci ;)
Alors je viens d'essayer en adaptant le code à mon cas, et le compilo m'affiche : "Trop peu de paramètres. 1 attendu "
pour cette ligne :
SQL2 étant une string qui contient une requête.
Alors après quelque recherches, il me semble qu'il s'agit d'un manque de déclaration d'une Table dans le code :
il me semble que ces lignes :
ne suffisent pas à déclarer que l'on va utiliser des Tables présentes dans la base de données utilisée pour le formulaire.
Le " 1 attendu " était un " 2 attendu" quand j'utilisais 2 Tables différentes dans ma requête.
Il me semble évident que les Tables concernées ne sont donc pas correctement déclarée dans le code.
Peux-tu m'éclairer à ce sujet ?
Pour plus de clarté : voici le code utilisé :
Voilà donc SQL2 contient une requête extrêmement basique sur une seule Table. Je ne sais pas comment déclarer l'utilisation de cette Table dans le code.
merci de tes lumières ;)
Alors je viens d'essayer en adaptant le code à mon cas, et le compilo m'affiche : "Trop peu de paramètres. 1 attendu "
pour cette ligne :
Set rs = dbs.OpenRecordset(SQL2, dbOpenSnapshot)
SQL2 étant une string qui contient une requête.
Alors après quelque recherches, il me semble qu'il s'agit d'un manque de déclaration d'une Table dans le code :
il me semble que ces lignes :
Dim dbs As Database Set dbs = CurrentDb()
ne suffisent pas à déclarer que l'on va utiliser des Tables présentes dans la base de données utilisée pour le formulaire.
Le " 1 attendu " était un " 2 attendu" quand j'utilisais 2 Tables différentes dans ma requête.
Il me semble évident que les Tables concernées ne sont donc pas correctement déclarée dans le code.
Peux-tu m'éclairer à ce sujet ?
Pour plus de clarté : voici le code utilisé :
Private Sub Étiquette1_Click() Dim SQL2 As String SQL2 = "SELECT ..." Dim dbs As Database Dim rs As Recordset Dim qdf As QueryDef Set dbs = CurrentDb() Set rs = dbs.OpenRecordset(SQL2, dbOpenSnapshot) With dbs Set qdf = .CreateQueryDef("Ecarts", SQL) DoCmd.OpenQuery "Ecarts" .QueryDefs.Delete "Ecarts" End With dbs.Close qdf.Close End Sub
Voilà donc SQL2 contient une requête extrêmement basique sur une seule Table. Je ne sais pas comment déclarer l'utilisation de cette Table dans le code.
merci de tes lumières ;)
blux
Messages postés
26527
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
9 juil. 2013 à 13:48
9 juil. 2013 à 13:48
Pas besoin de déclarer la table dans le code, elle sera accédée via SQL pur.
Donc, tu vires tout ce qui concerne ton recordset (c'est inutile pour ce que tu as à faire), mais il faut que tu mettes quelque chose dans la variable SQL, puisque c'est elle qui est appelée dans le openquery (et non la variable SQL2).
Donc, tu vires tout ce qui concerne ton recordset (c'est inutile pour ce que tu as à faire), mais il faut que tu mettes quelque chose dans la variable SQL, puisque c'est elle qui est appelée dans le openquery (et non la variable SQL2).
blux
Messages postés
26527
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 décembre 2024
3 317
9 juil. 2013 à 13:50
9 juil. 2013 à 13:50
Pas besoin de déclarer la table dans le code, elle sera accédée via SQL pur.
Donc, tu vires tout ce qui concerne ton recordset (c'est inutile pour ce que tu as à faire), mais il faut que tu mettes quelque chose dans la variable SQL, puisque c'est elle qui est appelée dans le openquery (et non la variable SQL2).
Donc, tu vires tout ce qui concerne ton recordset (c'est inutile pour ce que tu as à faire), mais il faut que tu mettes quelque chose dans la variable SQL, puisque c'est elle qui est appelée dans le openquery (et non la variable SQL2).