[ACCESS]Problème requête avec variables

Cameleon33 -  
 Cameleon33 -
Bonjour,

J'ai crée une requête que j'ai inséré dans un événement dans un formulaire. En gros j'ai 1 liste et une zone de texte dans lesquelles on choisit/met des valeurs et ensuite on appuie sur un tit bouton et il exécute le code suivant :
    Dim stDocName As String
    Dim test As Integer
    Dim test2 As Integer
    
    test = CStr(Combo2.Value)
    MsgBox test
    test2 = CStr(Text6.Value)
    
    stDocName = "SELECT DISTINCT NOMENCLATURE.Quantite*" & test2 & " AS QuantiteTotale, PRODUIT.NomProd, NOMENCLATURE.Quantite*" & test2 & "*PRODUIT.CoutProd AS CoutTotal, PRODUIT.StockProd-NOMENCLATURE.Quantite*" & test2 & " AS StockFinal, PRODUIT.SSProd, IIf(PRODUIT.StockProd-NOMENCLATURE.Quantite*" & test2 & " <PRODUIT.SSProd,1,0) AS Commande, IIf(PRODUIT.SSProd-PRODUIT.StockProd+NOMENCLATURE.Quantite*" & test2 & ">0,PRODUIT.SSProd-PRODUIT.StockProd+NOMENCLATURE.Quantite*" & test2 & ",0) AS QuantiteACommander, PRODUIT.LotEconomique " & _
    "FROM PRODUIT, NOMENCLATURE " & _
    "WHERE ((PRODUIT.IdProd=NOMENCLATURE.IdEnfant) AND ((NOMENCLATURE.IdEnfant) In (SELECT DISTINCT NOMENCLATURE.IdEnfant FROM NOMENCLATURE, PRODUIT WHERE PRODUIT.IdProd = " & test & " AND PRODUIT.IdProd = NOMENCLATURE.IdParent;)));"
    DoCmd.RunSQL (stDocName)


Le problème est qu'il me retourne le message suivant :

"Une action ExécuterSQL nécessite un argument consistant en une instruction SQL... et là je comprends plus...

Merci

Cam'

5 réponses

LatelyGeek Messages postés 1759 Statut Membre 550
 
C'est que la syntaxe de ton SQL n'est pas bonne. Le " après Quantité* ferme le premier " et donc Access ne peut pas évaluer la suite.
0
Cameleon33
 
Il faut que je mette quoi comme synthaxe alors? Normalement le & après " lui dit que la chaîne de caractères continu après...

Je vois pas ce qu'il faut que je mette...

merci de l'aide

Cam'
0
LatelyGeek Messages postés 1759 Statut Membre 550
 
Pardon, je tilte tard, c'est surtout que tu ne peux pas "lancer" un SELECT avec RunSQL (Qui EXECUTE les requêtes actions.

C'est possible que tu enregistres le SELECT comme une requête? Tu pourrais le lancer avec un DoCmd.OpenQuery, qui lui, fonctionne parfaitement.
0
Cameleon33
 
Oui j'ai déjà essayé de le mettre dans une requête que je lancerais avec Docmd.OpenQuery... mais dans ma requête je ne peux pas intégrer mes variables... ou alors je sais pas avec quelle syntaxe il le prendrait...
0
Cameleon33
 
Le problème est que j'ai déjà essayé de cette manière... j'ai crée une requête, j'y ai collé le code ci-desus et j'ai lié le formulaire avec OpenQuery.. mais ca ne marche pas... je pense qu'il n'aime pas la syntaxe avec les variables... y a un moyen de lui faire passer la pillule?

Merci

Cam'
0
amigo
 
bonjour,

Tu peux créer une requête avec la méthode CreateQueryDef.

J'explique, d'abord tu crée une requête manuellement, peut importe ce que tu mets dedans, l'important c'est qu'elle existe, on l'appellera Requête1

Voici le code pour créer une requête:
Dim dbs As Database, qdf As QueryDef, stDocName As String
Set dbs = CurrentDb

    stDocName = "SELECT DISTINCT NOMENCLATURE.Quantite*" & test2 & " AS QuantiteTotale, PRODUIT.NomProd, NOMENCLATURE.Quantite*" & test2 & "*PRODUIT.CoutProd AS CoutTotal, PRODUIT.StockProd-NOMENCLATURE.Quantite*" & test2 & " AS StockFinal, PRODUIT.SSProd, IIf(PRODUIT.StockProd-NOMENCLATURE.Quantite*" & test2 & " <PRODUIT.SSProd,1,0) AS Commande, IIf(PRODUIT.SSProd-PRODUIT.StockProd+NOMENCLATURE.Quantite*" & test2 & ">0,PRODUIT.SSProd-PRODUIT.StockProd+NOMENCLATURE.Quantite*" & test2 & ",0) AS QuantiteACommander, PRODUIT.LotEconomique " & _
    "FROM PRODUIT, NOMENCLATURE " & _
    "WHERE ((PRODUIT.IdProd=NOMENCLATURE.IdEnfant) AND ((NOMENCLATURE.IdEnfant) In (SELECT DISTINCT NOMENCLATURE.IdEnfant FROM NOMENCLATURE, PRODUIT WHERE PRODUIT.IdProd = " & test & " AND PRODUIT.IdProd = NOMENCLATURE.IdParent;)));"

dbs.QueryDefs.Delete ("Requête1") ' effacer requête existante
Set qdf = dbs.CreateQueryDef("Requête1", stDocName) ' recréer requête avec variables

DoCmd.OpenQuery "Requête1"


Salut.
0

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

Posez votre question
Cameleon33
 
Impécable ça marche!!!

Merci pour votre aide!!

Cam'
0