VBA porbleme de requetes
darkspoilt
Messages postés
254
Date d'inscription
Statut
Membre
Dernière intervention
-
darkspoilt Messages postés 254 Date d'inscription Statut Membre Dernière intervention -
darkspoilt Messages postés 254 Date d'inscription Statut Membre Dernière intervention -
Bonjour j'ai un porbleme pour exécuter ma commande SQL en VBA j'ai tapé ce code la
C'est la meme que la commande qu'une requete selection SQL de Access
il me met une erreur a ma ligne de commande SQL je ne comrpends pas pourquoi ela fonctionne pas si quelqu'un peut m'aider il veut pas s'exécuter ca doit etre une erreur de syntaxe mais je vois pas laquelle
Merci d'avance
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, "2005_T3" AS année FROM getTable WHERE (((getTable.CBQD)="total") And ((getTable.MOIS)="total") And ((getTable.CMOP)="total"));" DoCmd.RunSQL Sql
C'est la meme que la commande qu'une requete selection SQL de Access
il me met une erreur a ma ligne de commande SQL je ne comrpends pas pourquoi ela fonctionne pas si quelqu'un peut m'aider il veut pas s'exécuter ca doit etre une erreur de syntaxe mais je vois pas laquelle
Merci d'avance
9 réponses
Salut,
Il me semble que l'on ne peut pas mettre de " dans une chaine de caractères en vba. Donc essaye de les remplacer par des ' ou de mettre des ' devant chaque ".
Je pense que cela devrait marcher.
Il me semble que l'on ne peut pas mettre de " dans une chaine de caractères en vba. Donc essaye de les remplacer par des ' ou de mettre des ' devant chaque ".
Je pense que cela devrait marcher.
ca marche merci mais il me met une erreur
Une action exécuter SQL nécessite un argumentconsistant en une instruction SQL
j'ai fais un msgbox pour vérifier ma ligne est bien dedans
Une action exécuter SQL nécessite un argumentconsistant en une instruction SQL
j'ai fais un msgbox pour vérifier ma ligne est bien dedans
Bonjour,
Il existe 2 soucis dans ton programme :
1- un souci de SQL à travers VBA.
2- exécuter une requête SELECT en VBA sans connexion à la base de données.
1- En VBA, les guillemets " correspondent uniquement à des chaînes de caractères. Il ne faut donc pas de " directement dans le SQL intégré dans le VBA mais une apostrophe '.
La commande SQL sous VBA devient donc :
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
Comme le WHERE ne contient que des AND, les parenthèses peuvent être supprimées.
2- Le RunQSL pour un SELECT peut poser des problèmes car il faut se connecter à la base et définir la requête qui s'y attache. Ce n'est pas forcément simple. Le code VBA de base devient alors :
Sub Exemple()
Dim dbCourante As DAO.Database
Dim rstRequete As DAO.Recordset
Dim strOPPO as String
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête définie par SQL
Set rstRequete = dbCourante.OpenRecordset(SQL)
'Récupérer la valeur OPPO pour l'enregistrement de la requête pour la placer dans une variable (pour un usage futur)
strOPPO = rstRequete!OPPO
'Se déconnecter de la requête et de la base
Set rstRequete = Nothing
Set dbCourante = Nothing
End Sub
Maintenant, il faut modifier le code pour tenir compte de ta demande et de l'intéret du SELECT dans ton projet. Si la requête SQL retourne plusieurs enregistrements, il faut une boucle...
J'espère avoir bien répondu.
Il existe 2 soucis dans ton programme :
1- un souci de SQL à travers VBA.
2- exécuter une requête SELECT en VBA sans connexion à la base de données.
1- En VBA, les guillemets " correspondent uniquement à des chaînes de caractères. Il ne faut donc pas de " directement dans le SQL intégré dans le VBA mais une apostrophe '.
La commande SQL sous VBA devient donc :
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
Comme le WHERE ne contient que des AND, les parenthèses peuvent être supprimées.
2- Le RunQSL pour un SELECT peut poser des problèmes car il faut se connecter à la base et définir la requête qui s'y attache. Ce n'est pas forcément simple. Le code VBA de base devient alors :
Sub Exemple()
Dim dbCourante As DAO.Database
Dim rstRequete As DAO.Recordset
Dim strOPPO as String
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = "SELECT getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__, '2005_T3' AS année FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête définie par SQL
Set rstRequete = dbCourante.OpenRecordset(SQL)
'Récupérer la valeur OPPO pour l'enregistrement de la requête pour la placer dans une variable (pour un usage futur)
strOPPO = rstRequete!OPPO
'Se déconnecter de la requête et de la base
Set rstRequete = Nothing
Set dbCourante = Nothing
End Sub
Maintenant, il faut modifier le code pour tenir compte de ta demande et de l'intéret du SELECT dans ton projet. Si la requête SQL retourne plusieurs enregistrements, il faut une boucle...
J'espère avoir bien répondu.
Merci beaucoup pour ton code ca m'avance énormément
En plus tu as bien expliqué a quoi correspond chaque module ce qui me permet de comprendre.
en fait mon select va servi a etre ajouté avec une requete ajout dont la commande est
La place de ReqSelect ca serait strOPPO ???
En plus tu as bien expliqué a quoi correspond chaque module ce qui me permet de comprendre.
en fait mon select va servi a etre ajouté avec une requete ajout dont la commande est
Dim Var as String Var = "ReqSelect" Sql="INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT " & Var & ".année, " & Var & ".OPPO, "& Var & ".MPE," & Var & "..MPF," & Var & "..MRE," & Var & "..MRF," & Var & "..M__ FROM" & Var & ";" DoCmd SQL
La place de ReqSelect ca serait strOPPO ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il n'y a pas d'intérêt de dissocier la requête SELECT du INSERT. Les 2 requêtes peuvent être fusionnées. Sinon, dans ta commande, il y a des erreurs parmi les guillemets et des points...
Si je ne me trompe pas, le programme devrait être de la forme :
Sub Exemple()
Dim dbCourante As DAO.Database
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = " INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT '2005_T3', getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__ FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête
dbCourante.Execute (SQL)
Set dbCourante = Nothing
End Sub
Si je ne me trompe pas, le programme devrait être de la forme :
Sub Exemple()
Dim dbCourante As DAO.Database
'Définir la base de travail comme la base actuelle
Set dbCourante = CurrentDb
'Définir la requête
SQL = " INSERT INTO TableTest ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT '2005_T3', getTable.OPPO, getTable.MPE, getTable.MPF, getTable.MRE, getTable.MRF, getTable.M__ FROM getTable WHERE getTable.CBQD='total' And getTable.MOIS='total' And getTable.CMOP='total';"
'Exécuter la requête
dbCourante.Execute (SQL)
Set dbCourante = Nothing
End Sub
je savais pas qu'on pouvait fusionner les deux j'aurais au moins appris quelque chose. sinon il met une erreur trop peu de paramètre 9attendu lorsque j'execute
Je fait ma premiere requête pour ajouter une colonne année que je rempli a trvers le code d'ou la raison de mon premier Select c'est pour filtrer etajouter une colonne a ma premiere table
le code sql de Access généré donne ceci
le code sql de Access généré donne ceci
PFPF2005_T3 est une table présente dans Access ma premiere idée est de faire nom de la requete Req2005_T3 SELECT PJPF2005_T3.OPPO, PJPF2005_T3.MPE, PJPF2005_T3.MPF, PJPF2005_T3.MRE, PJPF2005_T3.MRF, PJPF2005_T3.M__, "2005_T3" AS année FROM PJPF2005_T3 WHERE (((PJPF2005_T3.CBQD)="total") AND ((PJPF2005_T3.MOIS)="total") AND ((PJPF2005_T3.CMOP)="total")); et ensuite INSERT INTO Test ( année, OPPO, MPE, MPF, MRE, MRF, M__ ) SELECT Req2005_T3.année, Req2005_T3.OPPO, Req2005_T3.MPE, Req2005_T3.MPF, Req2005_T3.MRE, Req2005_T3.MRF, Req2005_T3.M__ FROM Req2005_T3; total étant une valeur Req2005_T3 une requete selection