[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'
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   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
    1. 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
  2. LatelyGeek Messages postés 1774 Date d'inscription   Statut Membre Dernière intervention   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
    1. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    Merci pour votre aide!!

    Cam'
    0