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 :

Problème de recordset d'une requête paramêtrée


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut Problème de recordset d'une requête paramêtrée
    Bonjour,

    J'ai créé une requête par l'assistant de requête.
    je voudrai faire un recordset dessus en vba.
    Faire un recordset ne me pose pas de problème habituellement, mais la il me dis qu'il attend 1 paramètre.
    Après quelque recherche sur le forum j'ai trouvé des discutions dessus mais je n'arrive pas à me dépatouiller.
    Il me marque "élément non trouvé dans la collection".

    Voici ma requête en sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS [Forms]![Frm_Selection_Comparaison]![Lmd_Etape] Text ( 5 );
    SELECT Projet.ID_P, Projet.Nom_P, Projet.Longueur, Projet.Nb_Stations, Projet.Montant_Projet, Detail_Poste.Num_Certu, Detail_Poste.Montant_PCertu, Liste_Poste_Certu.Nom_Certu, Detail_Poste_Certu.ID_SP_Certu, Detail_Poste_Certu.Montant_SP_Certu, Sous_Poste_Certu.Nom_SP_Certu, Detail_SP_Certu.ID_Desig, Detail_SP_Certu.Montant_Desig, Designation.Nom_Desig, Contient.ID_Data, Contient.CE, Contient.Etape, Contient.Indice, DATA.Unité, DATA.PU, DATA.Qté, DATA.Peraleas, DATA.Remarque, DATA.Offreur
    FROM (Sous_Poste_Certu INNER JOIN (Projet INNER JOIN ((Liste_Poste_Certu INNER JOIN Detail_Poste ON Liste_Poste_Certu.Num_Certu = Detail_Poste.Num_Certu) INNER JOIN Detail_Poste_Certu ON Liste_Poste_Certu.Num_Certu = Detail_Poste_Certu.Num_Certu) ON Projet.ID_P = Detail_Poste.ID_P) ON Sous_Poste_Certu.ID_SP_Certu = Detail_Poste_Certu.ID_SP_Certu) INNER JOIN ((Designation INNER JOIN (DATA INNER JOIN Contient ON DATA.ID_Data = Contient.ID_Data) ON Designation.ID_Desig = Contient.ID_Desig) INNER JOIN Detail_SP_Certu ON Designation.ID_Desig = Detail_SP_Certu.ID_Desig) ON Sous_Poste_Certu.ID_SP_Certu = Detail_SP_Certu.ID_SP_Certu
    GROUP BY Projet.ID_P, Projet.Nom_P, Projet.Longueur, Projet.Nb_Stations, Projet.Montant_Projet, Detail_Poste.Num_Certu, Detail_Poste.Montant_PCertu, Liste_Poste_Certu.Nom_Certu, Detail_Poste_Certu.ID_SP_Certu, Detail_Poste_Certu.Montant_SP_Certu, Sous_Poste_Certu.Nom_SP_Certu, Detail_SP_Certu.ID_Desig, Detail_SP_Certu.Montant_Desig, Designation.Nom_Desig, Contient.ID_Data, Contient.CE, Contient.Etape, Contient.Indice, DATA.Unité, DATA.PU, DATA.Qté, DATA.Peraleas, DATA.Remarque, DATA.Offreur, Liste_Poste_Certu.Selection, Sous_Poste_Certu.Selection
    HAVING (((Contient.Etape)=[Formulaires]![Frm_Selection_Comparaison]![Lmd_Etape]) AND ((Liste_Poste_Certu.Selection)=True) AND ((Sous_Poste_Certu.Selection)=True));
    Comme vous le voyez celle-ci est imposant et je ne voulais pas faire comme d'habitude cad mettre dans une variable text mon code sql.
    Je voulais essayer autrement.

    J'ai donc mis se code pour parcourir ma requête:

    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
    Set Db = CurrentDb
     
        Set qry = Db.QueryDefs("Rqt_Projet_A_Comparer")
     
        qry.Parameters("Etape") = "SDP"
     
        Set myrst = qry.OpenRecordset
     
        'si le recordset n'est pas vide
        If Not myrst.EOF Then
        ' tant qu'il n'est pas vide
            Do While Not myrst.EOF
            MsgBox (myrst.Name)
            myrst.MoveNext
            Loop
        End If
    Savez vous pourquoi il ne trouve pas l'élément dans la collection?
    Est-ce parce que ma requête a 3 paramètre (etape, selection1,selection2)?
    Si oui comment je fais pour paramétrer mes 3 critères?

    Si non est-ce parce que ma requête a besoin des éléments du formulaire ou j'exécute se code?

    Et si encore non avez vous une idée pour résoudre mon problème?

    Merci

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    As-tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        qry.Parameters("[Forms]![Frm_Selection_Comparaison]![Lmd_Etape]") = "SDP"
    ou encore, sans le nom du paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        qry.Parameters(0) = "SDP"
    Si veux vérifier les paramètres et savoir leurs noms, après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set qry = Db.QueryDefs("Rqt_Projet_A_Comparer")
    ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
        For i = 0 To qry.Parameters.Count - 1
            Debug.Print qry.Parameters(i).Name
        Next
    Tu verra dans la fenêtre d'exécution le nom des paramètres.

    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Merci LedZeppII.

    C'était bien ce code qu'il fallait mettre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qry.Parameters("[Forms]![Frm_Selection_Comparaison]![Lmd_Etape]") = "SDP"
    Par contre maintenant il me dis qu'il faut 2 autres paramètres.
    Il s'agit de mes variable "Selection" de mes tables "Liste_Poste_Certu" et "Sous_Poste_Certu".

    Comme je ne peux pas récupérer les valeur sur mon form j'ai donc utilisé ton autre code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qry.Parameters(0).Value = " & Me.Lmd_Etape & "
    Ca marche aussi très bien.

    J'ai donc mis se code pour les 2 autres paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qry.Parameters(1).Value = vrai
    Je n'ai mis qu'une ligne pour les 2 car si je mettais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    qry.Parameters(1).Value = vrai
    qry.Parameters(2).Value = vrai
    Il me dis que l'élément n'est pas trouvé dans la collection.
    Alors qu'avec seulement 1 ligne je n'ai plus de message d'erreur.
    Est-ce parce que mes 2 variables on le même nom?

    Par contre la suite de mon code ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set myrst = qry.OpenRecordset
        'si le recordset n'est pas vide
        If Not myrst.EOF Then
        ' tant qu'il n'est pas vide
            Do While Not myrst.EOF
            MsgBox (myrst.Fields("Nom_P").Value)
            myrst.MoveNext
            Loop
        End If
    Le recordset est bizarrement vide.
    J'ai mis un msgbox tout simple après : Et il n'est pas apparu.

    je me suis dis que c'était la requête qui n'allait pas.
    J'ai donc ouvert ma requête (en faisant un openquerry) et elle s'est bien ouverte avec les bon enregistrement dedans.

    Qu'est-ce qui ne va pas dans mon code qui parcourt mon recordset?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    C'est bon j'avais oublié les parenthèse à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrst = qry.OpenRecordset
    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set myrst = qry.OpenRecordset ()

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

Discussions similaires

  1. Problème avec une requête paramétrée
    Par youce90 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2013, 13h46
  2. Réponses: 2
    Dernier message: 08/10/2008, 14h22
  3. Réponses: 4
    Dernier message: 30/03/2008, 21h56
  4. [Requête][03]Problème d'export d'une requête avec paramètre
    Par SLE dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/04/2007, 11h29

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