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

VBA Access Discussion :

Récupérer une valeur d'une requête dans une variable [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut Récupérer une valeur d'une requête dans une variable
    Bonjour,

    J'ai le besoin suivant:

    Récupérer la valeur "Montant" dans une requête qui ne renvoi qu'une seule ligne.

    Je pensais que ca allait être très simple mais j'ai une succession d'erreur...
    Au début je pensais passer par un recordset puis pour court-circuiter l'erreur j'ai voulu passer par un DLookup pour au final revenir sur le recordset... sans succès.

    Voici mon code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Function AffichageMontant()
     
    Dim Montant As Integer
    Dim rstACTION As DAO.Recordset
    Dim strSQL As String
     
    '-- lecture de la requête pour récupérer le montant total relancé
    strSQL = "SELECT ACTIONS.NUM_ACTION, ACTIONS.Montant FROM Actions WHERE (((ACTIONS.NUM_ACTION)=[Formulaires]![Saisie Action]![NUM_ACTION]));"
     
    '-- ouverture d'un recordset contenant résultat de la requête action
    Set rstACTION = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
     
    '-- test du volume du recordset, s'il est vide: fin de la procédure
    If rstACTION.EOF Then Exit Sub
     
    MsgBox (Montant)
     
    End Function
    Et j'ai l'erreur suivante qui pop: "Erreur '3061', trop peu de paramètres. Au moins 1 attendu" sur la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rstACTION = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
    Remarques: cette fonction est intégrée dans un module avec une autre fonction qui comporte des variables du même nom, est-ce un problème ? Initialement, cette fonction étant complémentaire, je l'avais directement inclue dans la fonction principale, mais pour gérer l'erreur je l'ai ressortie afin d'y voir plus clair.
    J'ai cherché pendant 2 bonnes heures sans succès ...

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Quand on tape du SQL, il faut que tout soit en Anglais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT ACTIONS.NUM_ACTION, ACTIONS.Montant FROM Actions WHERE (((ACTIONS.NUM_ACTION)=[Forms]![Saisie Action]![NUM_ACTION]));"
    Et c'est vicieux car si tu regardes le SQL cree par Access tu as sans doute [Formulaires]. Ca arrive parfois. Access oublie de traduire et cela ne semble pas le gener.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Salut !

    Merci pour ta réponse, j'ai essayé. Sans succès .

    Toujours la même erreur sur la ligne annoncée...

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK, l'autre cause classique est une faute d'orthographe dans un des noms de champ.

    Access prend cela pour une demande de parametre.

    Copie ton SQL dans une requete vierge et demande a voir le resultat, cela devrait te donner une piste.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Problème résolu.

    Ce n'était pas un problème de syntaxe ou d'orthographe mais un problème de logique : le chat se mordait la queue.
    Ca m'a permis de simplifier et de me rendre compte que j'avais une solution encore plus simple pour récupérer ce que je voulais... Et ca m'a pris 1 ligne à ajouter dans la fonction principale................................

    Merci pour votre aide en tout cas,

    Bye

  6. #6
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Bonjour,

    Je sèche sur un problème tout à fait similaire mais sur une autre fonctionnalité de mon code et j'ai clairement identifié ce qu' Access n'apprécie pas.

    Lors de l'ouverture d'un recordset contenant une requête il y a bug si dans la requête il y a un critère qui pointe vers un contrôle de formulaire.
    La requête est juste, puisqu'elle tourne dans le QBE. J'ai modifié les termes FR pour qu'ils soient en anglais.

    Toujours la même erreur:

    "Erreur d'exécution '3061': trop peu de paramètres. 1 attendu"

    L'erreur intervient sur le Set rstCONTACT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    strSQL = "SELECT TEMP_FACT_A_RELANCER.[Date_piece], TEMP_FACT_A_RELANCER.LECR, TEMP_FACT_A_RELANCER.Montant FROM TEMP_FACT_A_RELANCER WHERE (((TEMP_FACT_A_RELANCER.[A_RELANCER O/N])=True));"  '-- sans intérêt pour le sujet
     
    strSQL2 = "SELECT CONTACTS.Civilité, CONTACTS.[Nom contact], CONTACTS.Prénom, CONTACTS.Mail FROM Contacts WHERE((([Nom contact] & ' ' & [Prénom])=[Forms]![Saisie Action]![INTERLOCUTEUR]));"
     
    Set rstTEMPFACT = dbsBalCli.OpenRecordset(strSQL, dbOpenDynaset) '-- sans intérêt pour le sujet
    Set rstCONTACT = dbsBalCli.OpenRecordset(strSQL2, dbOpenDynaset)
    Quand je supprime le critère de ma requête SQL, donc en gros pas de clause WHERE, ou quand je fixe la valeur dans le critère à autre chose qu'un contrôle de formulaire, le code tourne sans pb.

    Help, c'est un besoin pressant ...

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL2 = "SELECT CONTACTS.Civilité, CONTACTS.[Nom contact], CONTACTS.Prénom, CONTACTS.Mail"
    strSQL2 = strSQL2  & " FROM Contacts"
    strSQL2 = strSQL2  & " WHERE ([Nom contact] & ' ' & [Prénom])=[Forms]![Saisie Action]![INTERLOCUTEUR];"
    Comme c'est un zone de texte, il faut utiliser les delimiteurs adaptes soit l'apostrophe ou le guillemet (et perso, je prefere les guillemets) donc je pense que la solution est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL2 = "SELECT CONTACTS.Civilité, CONTACTS.[Nom contact], CONTACTS.Prénom, CONTACTS.Mail"
    strSQL2 = strSQL2  & " FROM Contacts"
    strSQL2 = strSQL2  & " WHERE [Nom contact] & "" "" & [Prénom] =""" & [Forms]![Saisie Action]![INTERLOCUTEUR] & """"
    J'ai enleve les parantheses qui ne seravaient a rien.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Une autre facon de remonter la piste du bug est

    1. passer en mode debug
    2. se mettre dans la fenetre d'execution immediate ([ctrl][g])
    3. taper : ? rstCONTACT.parameters(1).name [Enter] (ou 0, je ne me souviens jamais ou commence la sequence)


    Ca va afficher le nom du parametre attendu par Access

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2016
    Messages : 184
    Points : 275
    Points
    275
    Par défaut
    Merci beaucoup, la requête SQL a été comprise. Je faisais une erreur ou Access n'aime simplement pas sous la forme initiale ?

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Je faisais une erreur ou Access n'aime simplement pas sous la forme initiale ?
    L'erreur est assez fréquente d'inclure des paramètres issus d'un formulaire à la construction du SQL d'un RecordSet entre les délimiteurs "".
    Il faut savoir qu'on peut utiliser cette méthode pour le RecordSource d'un formulaire ou le contenu d'une liste déroulante mais pas pour un RecordSet dans VBA, ou alors il faut utiliser Parameters comme te l'as indiqué marot_r.
    Le plus simple c'est de concaténer les paramètres à la phrase SQL : "WHERE param =" & Me!monparam & " And ..."
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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

Discussions similaires

  1. Récupérer une valeur et l'utiliser dans une requête
    Par jojo57 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 07/04/2008, 14h17
  2. Réponses: 3
    Dernier message: 21/11/2006, 12h35
  3. Récupérer la valeur d'un champ dans une requête
    Par romaintaz dans le forum JDBC
    Réponses: 7
    Dernier message: 18/08/2006, 09h13
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 00h55

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