[ACCESS]Problème requête avec variables

Fermé
Cameleon33 - 29 mai 2008 à 20:33
 Cameleon33 - 3 juin 2008 à 10:51
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 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 549
30 mai 2008 à 19:31
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
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 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 549
31 mai 2008 à 20:24
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
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
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
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
Impécable ça marche!!!

Merci pour votre aide!!

Cam'
0