IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Passage de paramètre VBA dans requête SQL [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité de l' industrie
    Inscrit en
    Mars 2010
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Retraité de l' industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 180
    Par défaut Passage de paramètre VBA dans requête SQL
    Bonsoir.

    Je suis en train de développer une petite application de facturation.
    Pour se faire, je dois calculer le montant d' une facture, d' un BL, d' une facture des BL émis pour un client.
    Au départ, j' ai trois formulaires:
    un formulaire création d' une facture soit F1
    un formulaire modification d' une facture soit F2
    un formulaire de facturation des BL d' un client soit F3.
    Les calculs dans les trois cas sont les même. Seul les critères diffèrent à savoir:
    Cas 1: Clé de préparation=F1!Clé de préparation
    Cas 2: Clé de préparation=F2!Clé de préparation
    Cas 3: Clé de préparation=F3!Clé de préparation
    Plutôt que d' avoir trois procédures distinctes et sachant que le code SQL est dans le code VBA, peut-on récupérer le nom du formulaire déclanchant cette procédure et l' utiliser comme paramètre.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NomFormulaire=Forms(0).Name
    Requête="select.....Clé_préparation=NomFormulaire!Clé_Préparation;"
    Quand pensez-vous?

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour El Bosc,

    Tu peux le passer en argument dans ta fonction ou sub au moment de l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Requete(numR As String)
     
    End Sub
    ou numR serait la valeur de ton formulaire.

    Bonne journée

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité de l' industrie
    Inscrit en
    Mars 2010
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Retraité de l' industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 180
    Par défaut Passage de paramètre VBA dans reqête SQL
    Bonsoir,

    Je dois mal utiliser votre solution car j' obtiens un message d' erreur. Voici une requête exemple/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_BdrLv.Cf_BL, T_BdrLv.Cf_Clt, T_BdrLv.DtBL
    FROM T_BdrLv
    WHERE (((T_BdrLv.Cf_Clt)=[Formulaires]![F_DtnFctBLFct]![Cf_Clt]));
    En fait, seule la partie "[Formulaires]![F_DtnFctBLFct]" est différente suivant l' origine de l' appel de procédure.
    Suivant votre argument numR, je lui demande de trouver le nom du formulaire actif. Ensuite, j' ai tenté de l' in sérer dans la requête mais sans succés.
    Voir code ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub Requete(NmR As String)
    Dim Rqt As String
    NmR = Forms(2).Name
    MsgBox NmR 'Cette boite ne sert qu' à vérifier le nom du formulaire
    Rqt = "SELECT T_BdrLv.Cf_BL, T_BdrLv.Cf_Clt, T_BdrLv.DtBL FROM T_BdrLv " & _
             "WHERE (((T_BdrLv.Cf_Clt)=NmR!Clt));"
    DoCmd.RunSQL Rqt
    End Sub
    Merci de m' expliquer mon erreur

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour El Bosc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE (((T_BdrLv.Cf_Clt)=" & NmR & "!Clt));"
    En supposant que c'est numérique.

    Mais la solution que je te proposais: Quand l'appel de la procédure est faite tu es sur le formulaire, tu as déjà la liste qui fait ta clé de préparation alors tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requête Me.TaListeCléDePréparation
    Et dans la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub Requete(NmR As String)
    Dim Rqt As String
     
    MsgBox NmR 'Cette boite va vérifier la clé de préparation
    Rqt = "SELECT T_BdrLv.Cf_BL, T_BdrLv.Cf_Clt, T_BdrLv.DtBL FROM T_BdrLv " & _
             "WHERE (((T_BdrLv.Cf_Clt)=" & NmR & "));"
    DoCmd.RunSQL Rqt
    End Sub
    Bonne journée

  5. #5
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    RunSQL n'accepte que les requêtes actions ou DDL

  6. #6
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour El Bosc, Christophe,

    Encore une fois dans le vrai Christophe. Il n'y a vraiment rien qui t'échappe . Désolé El Bosc mais ma réponse n'est plus bonne. La solution qui me vient à l'esprit serait, en supposant que tu as une requête enregistrée, de reconstruire ta requête à chaque fois avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set db = CurrentDb
        Set qdf = db.QueryDefs("TaRequête")
        qdf.SQL = Rqt
    Ainsi elle prendrait les bons paramètres à chaque fois que tu lancerais ta procédure.

    Tu pourrais aussi affecter la valeur de la requête ainsi créer comme suit, disons à une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Liste.RowSource = Requête (Me.TaListeCléDePréparation)
    Il faudrait que tu modifies ta procédure pour en faire une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function Requete(NmR As String) As String
    Dim Rqt As String
     
    MsgBox NmR 'Cette boite va vérifier la clé de préparation
    Rqt = "SELECT T_BdrLv.Cf_BL, T_BdrLv.Cf_Clt, T_BdrLv.DtBL FROM T_BdrLv " & _
             "WHERE (((T_BdrLv.Cf_Clt)=" & NmR & "));"
    Requete = Rqt
    End Function
    Bonne journée

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité de l' industrie
    Inscrit en
    Mars 2010
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Retraité de l' industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 180
    Par défaut Parametre dans instruction SQL
    Bonjour,

    Je teste et torture votre solution sans succès. J' obtiens toujours lors de l' exécution pas à pas, le message suivant:
    Une action executerSQL nécessite un argument consistant en une instruction SQL.
    Pour info, le code tel que je l' ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub Requete(NmR As String)
    Dim Rqt As String
    NmR = Forms(1).Name
    MsgBox NmR
    Rqt = "SELECT T_BdrLv.Cf_BL, T_BdrLv.Cf_Clt, T_BdrLv.DtBL FROM T_BdrLv " & _
             "WHERE (((T_BdrLv.Cf_Clt)=" & NmR & "!Cf_Clt));"
    DoCmd.RunSQL Rqt
     
    End Sub
    Les clé Cf_Clt sont tout les deux numérique

    Cordialement

  8. #8
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 888
    Par défaut
    Bonjour El Bosc,

    C'est parce que tu ne peux pas effectuer :Comme le disait Christophe le DoCmd n'accepte pas les requêtes sélections.

    Bonne journée

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité de l' industrie
    Inscrit en
    Mars 2010
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Retraité de l' industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 180
    Par défaut Passage de paramètre
    Bonjour,

    En définitive, il n' y a pas de solution à ce problème. Dommage, cela aurait raccourci considérablement mes procédures. Bon, après, ce n' est pas bien grave dans la mesure ou les temps d' exécution sont très courts.
    Merci encore de votre aide et bonne continuation

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage de variables dans requête SQL
    Par ducho dans le forum PL/SQL
    Réponses: 22
    Dernier message: 31/05/2012, 17h02
  2. variable vba dans requête sql
    Par pasb71 dans le forum Access
    Réponses: 4
    Dernier message: 16/05/2011, 18h58
  3. Passage de paramétre dynamique dans une requete SQL
    Par d.tellier dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/01/2010, 13h57
  4. utiliser des espaces dans requêtes SQL, dans du VBA
    Par willy-78milles dans le forum VBA Access
    Réponses: 13
    Dernier message: 26/03/2009, 11h31
  5. Réponses: 7
    Dernier message: 13/01/2009, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo