VBA porbleme de requetes

Fermé
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 - 22 mai 2007 à 09:12
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 - 22 mai 2007 à 14:22
Bonjour j'ai un porbleme pour exécuter ma commande SQL en VBA j'ai tapé ce code la
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

Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
22 mai 2007 à 09:29
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.
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 09:52
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
0
EBasta Messages postés 37 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 25 mai 2007 31
22 mai 2007 à 09:53
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.
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 10:41
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


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 ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 10:45
a etre ajouté a une requete ajout pardon
0
EBasta Messages postés 37 Date d'inscription mercredi 16 mai 2007 Statut Membre Dernière intervention 25 mai 2007 31
22 mai 2007 à 11:18
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
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 11:27
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
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 13:35
si quelqu'un peut m'aider j'arrive pas a trouver la syntaxe
Merci d'avance
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 1
22 mai 2007 à 14:22
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


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 
     

0