Prise en compte de variable string vba dans SQL
Bonjour,
Je suis entrain de faire une requête pour afficher des valeurs à sélectionner sur la base d'une sélection de valeurs antérieures.
Le problème que j'ai étant que lorsque je passe de la variable VBA où je stocke ma valeur à SQL je n'arrive pas à faire comprendre à sql que ma valeur de variable un texte .
ex: WHERE R4_ReferencePrixSemaine.[Unité prix] = "kg"
Lorsque je simple quote il m'affiche la variable comme un texte à remplir (msgbox du nom de ma valeur me demandant de rentrer un texte), lorsque je double quote "" strWhereUnite "" ; strWhereUnite apparait dans mon sql.
Je vous indique mon code vba général en rouge est la partie qui bug ainsi que les sql qui résultent.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Private Sub
Dim VarIDProd As Variant
Dim VarUnite As String
Dim VarBio As String
VarIDProd = Nom_Produit.Column(1)
strWhereProd = "[ID_Produit] = " & VarIDProd
VarUnite = Unite.Column(0)
strWhereUnite = " R4_ReferencePrixSemaine.[Unité prix] = " & VarUnite
VarBio = Bio_Conventionnel.Column(0)
strWhereBioconv = "R4_ReferencePrixSemaine.[Bio/Conventionnel] = " & VarBio
'Choisir le tarif de réference pour un produit et un segment client
SQL = "SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, " _
& "R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, " _
& "R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit " _
& "FROM R4_ReferencePrixSemaine " _
& "GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, " _
& "R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], " _
& "R4_ReferencePrixSemaine.ID_Produit " _
& "HAVING " & strWhereUnite & " And " & strWhereBioconv & " " _
& "And " & strWhereProd & " " _
& " ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, " _
& "Avg(R4_ReferencePrixSemaine.PrixRef); "
Tarif1.RowSource = SQL
Debug.Print SQL
End Sub |
En SQL ca donne
Code:
1 2 3 4 5
| SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit FROM R4_ReferencePrixSemaine GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit
HAVING R4_ReferencePrixSemaine.[Unité prix] = les 44 pièces And R4_ReferencePrixSemaine.[Bio/Conventionnel] = Bio
And [ID_Produit] = 4 ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, Avg(R4_ReferencePrixSemaine.PrixRef); |
SQL ne comprend donc pas que ma valeur est un texte et me sort un msgbox nommé bio et un msgbox nommé les 44 pièces ou je dois remplir du texte.
Si je double quote, j'obtiens
Code:
1 2 3 4 5
| SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit FROM R4_ReferencePrixSemaine GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit
HAVING " & strWhereUnite & " And " & strWhereBioconv & "
And [ID_Produit] = 4 ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, Avg(R4_ReferencePrixSemaine.PrixRef); |
Donc un résultat sans ce filtre..
Quelle est la syntaxe pour faire fonctionner cette requête vba?
Bien cordialement.
Julien
Variable texte dans requê SQL VBA
Bonsoir j'ai le code suivant dans l'environnement VBA Access :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Private Sub Commande48_Click()
Code = 1006592
SQL2 = ""
SQL2 = SQL2 & "SELECT Import_Sage.Composant, Count(Import_Sage.Composant) AS CompteDeComposant"
SQL2 = SQL2 & " FROM Import_Sage GROUP BY Import_Sage.Composant"
SQL2 = SQL2 & " HAVING (((Import_Sage.Composant)= Like '*" & Code & "' ));"
DoCmd.RunSQL (SQL2)
End Sub |
Ce code provoque une erreur '3075'. Opérateur absent.
Si j'utilise une Msgbox pour afficher la variable SQL2, j'ai exactement le code SQL générée lors de la création de la requête avec Access.
Je ne trouvez pas comment faire un like en SQL avec une variable qui est un nombre ou une chaîne de caractère.
Si je tape directement la valeur ça se finit de la même manière :
Code:
1 2 3 4
| SQL2 = ""
SQL2 = SQL2 & "SELECT Import_Sage.Composant, Count(Import_Sage.Composant) AS CompteDeComposant"
SQL2 = SQL2 & " FROM Import_Sage GROUP BY Import_Sage.Composant"
SQL2 = SQL2 & " HAVING (((Import_Sage.Composant)= Like *01006452 ));" |
Si vous collez le code SQL générée d'une requête faite dans Access dans un module VBA vous verrez qu'Access fait disparaitre les simples guillemets par des doubles car il remplace le vrai code SQL anglais par une traduction en français qui pose problème.
Je n'arrive pas à trouver la syntaxe pour inclure avec les caractères qui lui plairont un texte présent dans une variable dans la fonction like