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 :

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


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut Erreur d'exécution 3061: Trop peu de paramètres. 1 attendu
    Bonsoir le forum!

    J'ai un souci avec le code ci-dessous: à l'exécution j'ai l'erreur 3061, trop peu de paramètres. 1 attendu
    L'erreur se trouve au niveau de la ligne 32 du code: Set rs2 = db1.OpenRecordset(strSql, dbOpenSnapshot)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub cmd_matieres_calculerMM_Click()
        ' 2020-08-24  calculer la moyenne MM pour une classe d'élèves
        '                       pour toutes les matières (avec an moins une note)
        '                       avec des notes MD et CP comprises entre 2 dates
        ' Hypothèses:
        '   1 éléve appartient à une classe
        '   1 devoir est appartient à une classe
        '   certains élèves peuvent manquer un devoir, une composition
        '   le calcul peut se faire sur plusieurs devoirs, sur plusieurs compositions (même s'il n'y a qu'une seule CP en principe)
        
        Dim s1 As String, strSql As String
        Dim db1 As DAO.Database, rs1 As DAO.Recordset, rs2 As DAO.Recordset, rs3 As DAO.Recordset
    
    
        If IsNull(Me.classe_num) Then
            MsgBox "vous devez saisir une classe", vbInformation
            Exit Sub
        End If
    
        If IsNull(Me.date_deb) Or IsNull(Me.date_fin) Then
            MsgBox "vous devez saisir une date début et une date de fin", vbInformation
            Exit Sub
        End If
    
        ' déclarer une instance de l'application
        Set db1 = CurrentDb
    
        ' élèves de la classe
        strSql = "SELECT eleve_id, eleve_nom FROM R_classe_eleve" _
                 & " WHERE Classe_id= " & Me.classe_num _
                 & " GROUP BY eleve_id, eleve_nom"
        Set rs2 = db1.OpenRecordset(strSql, dbOpenSnapshot)
        If rs2.RecordCount = 0 Then
            MsgBox "Il n'y a aucun élève dans cette classe", vbInformation
            Exit Sub
        End If
    
        ' Boucle sur les matières avec devoirs valides dans cette période
        s1 = "classe_id =" & Me.classe_num _
             & " AND format(devoir_date,'yyyymmdd') >= '" & Format(Me.date_deb, "yyyymmdd") & "'" _
             & " AND format(devoir_date,'yyyymmdd') <= '" & Format(Me.date_fin, "yyyymmdd") & "'"
    djibysadji

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,

    pour débugger, insère une ligne juste avant la ligne 32.
    la valeur de strsql sera alors affichée dans la fenetre Exécution du VBE et tu devrais constater le pb.
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,

    pour débugger, insère une ligne juste avant la ligne 32.
    la valeur de strsql sera alors affichée dans la fenetre Exécution du VBE et tu devrais constater le pb.
    Bonjour
    Ok. Nous testons pour voir ce que ça donne

    Merci

    djibysadji

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Bonjour
    Ok. Nous testons pour voir ce que ça donne

    Merci

    djibysadji
    Bonjour

    Après débogage, nous avons ceci à la ligne 33: Rs2.RecordCount=<Variable objet ou variable de bloc With non définie>

    djibysadji

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Bonjour

    Après débogage, nous avons ceci à la ligne 33: Rs2.RecordCount=<Variable objet ou variable de bloc With non définie>

    djibysadji

    Rebonjour micniv, le forum

    Nous avons essayé de corriger, mais nous n'y parvenons pas.

    djibysadji

  6. #6
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut Bonjour djibysadji,
    Avez-vous trouvé votre erreur sur la définition du Recordset ?
    Le plus souvent l'erreur 3061 indique un nom de colonne ou de fonction mal orthographié, que le moteur Jet ne peut pas reconnaitre, et qu'il interprète donc comme un paramètre.

    Si le code sql est corrigé, le Recordset devrait être défini, et sa propriété RecordCount aussi. Pouvez-vous montrer la nouvelle version du code ?
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  7. #7
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Alors, est-ce que la requete R_classe_eleve est correcte et affiche bien les colonnes eleve_id et eleve_nom , comme attendu ?
    "Always look at the bright side of life." Monty Python.

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    Avez-vous trouvé votre erreur sur la définition du Recordset ?
    Le plus souvent l'erreur 3061 indique un nom de colonne ou de fonction mal orthographié, que le moteur Jet ne peut pas reconnaitre, et qu'il interprète donc comme un paramètre.

    Si le code sql est corrigé, le Recordset devrait être défini, et sa propriété RecordCount aussi. Pouvez-vous montrer la nouvelle version du code ?
    Non, nous sommes débutant. Il y a beaucoup de notions que nous ne maitrisons pas encore.

  9. #9
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    La première chose reste donc de corriger la requête.

    Pour cela, le plus simple est sans doute de créer une requête Access avec le même texte, pour voir ce qui gêne à l'exécution.

    Il faudrait donc faire dans le menu Access "créer une requête", y accéder en mode SQL et taper :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT eleve_id, eleve_nom FROM R_classe_eleve WHERE Classe_id= 1  GROUP BY eleve_id, eleve_nom ;
    (avez-vous vraiment besoin d'un group by dans ce contexte ?)

    Puis il faut exécuter la requête.
    Vous n'aurez pas de code 3061, par contre Access va vous demander de saisir la valeur qu'il n'a pas comprise.
    Par exemple, si vous vous êtes trompés sur eleve_nom qui n'appartient pas à R_classe_eleve , il vous demandera de saisir [eleve_nom].
    De cette façon vous savez sur quel nom de colonne vous avez fait l'erreur.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  10. #10
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Non, nous sommes débutant. Il y a beaucoup de notions que nous ne maitrisons pas encore.
    Bonsoir!
    L'erreur vient du fait que j'ai utilisé Classe_id dans la requête R_classe_eleve pour filtrer les bulletins des classes à partir de la liste déroulante Cboclasse dans le formulaire F_conseil_DeuxiemeSemestre.

    Comment ajouter ce paramètre dans la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSql = "SELECT eleve_id, eleve_nom FROM R_classe_eleve" _
                 & " WHERE Classe_id= " & Me.classe_num _
                 & " GROUP BY eleve_id, eleve_nom"
    djibysadji

  11. #11
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Bonsoir!
    L'erreur vient du fait que j'ai utilisé Classe_id dans la requête R_classe_eleve pour filtrer les bulletins des classes à partir de la liste déroulante Cboclasse dans le formulaire F_conseil_DeuxiemeSemestre.
    La colonne dans la table R_classe_eleve ne s'appelle t-elle pas classe_id ? Il vaudrait mieux que tous les identifiants aient le même formalisme (eleve_id, classe_id, etc.)
    Que représente classe_num dans ce formulaire ?

    Pour utiliser la valeur sélectionnée dans une liste déroulante comme filtre de la requête :
    • La colonne classe_id de la table R_classe_eleve doit être numérique pour que l'on puisse se passer de guillemets autour du critère
    • La colonne liée de la liste déroulante Cboclasse doit être l'identifiant (numérique) de la table Classe
    • Au moment de la requête, il existe bien une ligne sélectionnée dans Cboclasse (il faut revoir le contrôle de présence de la sélection avant le lancement de la requête)


    Auquel cas on peut écrire :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSql = "SELECT eleve_id, eleve_nom FROM R_classe_eleve"  & _
                " WHERE classe_id= " & Me.Cboclasse & _
                " GROUP BY eleve_id, eleve_nom"

    Cela dit je serais très déçue par la modélisation de votre base si cette requête était correcte
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  12. #12
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Bonjour!
    Bien sûr cette requête ne fonctionne pas ici.

    Merci

  13. #13
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut Bonne année djibysadji,
    Citation Envoyé par djibysadji Voir le message
    Bonjour!
    Bien sûr cette requête ne fonctionne pas ici.

    Merci
    Nos boules de cristal sont en panne...

    Avez-vous inséré comme l'a recommandé Micniv l'instruction:
    Qu'affiche t-elle ?
    Quel(s) message(s) d'erreur obtenez-vous ? Sur quelle ligne d'instruction ?

    Avez-vous modifié votre code ?

    Quel est le modèle de données ? Vous n'avez pas répondu aux questions précédentes :
    Citation Envoyé par Paraffine Voir le message
    La colonne dans la table R_classe_eleve ne s'appelle t-elle pas classe_id ? Il vaudrait mieux que tous les identifiants aient le même formalisme (eleve_id, classe_id, etc.)
    Que représente classe_num dans ce formulaire ?
    Avez-vous testé votre requête dans l'outil des requêtes d'Access comme proposé dans le post #9 ?

    La règle du jeu, consiste à décrire précisément le problème (le 1er post est réussi sur ce point), et quand on vous propose une piste, il faut nous dire comment vous l'avez suivie ou pourquoi vous n'avez pas essayé et ce que vous avez essayé d'autre, quel résultat vous avez obtenu (message d'erreur, résultat différent de celui attendu - et dans ce dernier cas on explique ce que l'on attendait, éventuellement avec un exemple...)
    Quand vous ne comprenez pas ce qui vous est proposé, il vaut mieux le dire, sinon ça ne va pas beaucoup avancer...
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  14. #14
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 234
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par Paraffine Voir le message
    Bonsoir!
    Bonne et heureuse année à tous.
    Pour des raisons indépendantes de ma volonté, je n'ai pas pu répondre à vos questions pour vous permettre de trouver plus facilement une solution. Désolé!
    Cependant, aujourd'hui, j'ai travaillé sur le projet et j'ai pu contourner le problème en créant une autre requête avec les mêmes champs que dans R_classe_eleve mais avec bien évidemment une dénomination différente: R_classe_eleve_dup. Ensuite j'ai relié la liste déroulante cboclasse du formulaire F_conseil_DeuxiemeSemestre au champ classe_id de la requête R_Classe_eleve_dup cette fois-ci. Et cela a fonctionné. Je n'ai plus cette erreur.
    Je sais que ma solution n'est pas du tout professionnel car la nouvelle requête qui est un clone de la précédente, si je puis m'exprimer ainsi, alourdira davantage mon application.

    djibysadji

    Citation Envoyé par Paraffine Voir le message
    Bonsoir!
    La colonne de la table R_classe_eleve s'appelle bien classe_id et est numérique. La colonne liée(ici classe_id) de la liste déroulante cboclasse est aussi l'identifiant de la table Classe.
    Nous avons aussi essayé le débogage proposé par micniv et nous avons noté ceci à la ligne 33: Rs2.RecordCount=<Variable objet ou variable de bloc With non définie>


    djibysadji

  15. #15
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    nous avons noté ceci à la ligne 33: Rs2.RecordCount=<Variable objet ou variable de bloc With non définie>
    Vous ne devriez pas avoir d'erreur ici. Il fallait seulement insérer une ligne 'debug.print strsql' comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    Set rs2 = db1.OpenRecordset(strSql, dbOpenSnapshot)
    debug.print strsql
        If rs2.RecordCount = 0 Then
            MsgBox "Il n'y a aucun élève dans cette classe", vbInformation
            Exit Sub
        End If
    ...
    crdlt
    "Always look at the bright side of life." Monty Python.

  16. #16
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut Bonjour djibysadji,
    Citation Envoyé par djibysadji Voir le message
    Nous avons aussi essayé le débogage proposé par micniv et nous avons noté ceci à la ligne 33: Rs2.RecordCount=<Variable objet ou variable de bloc With non définie>
    djibysadji
    On dirait que l'ouverture du Recordset n'a pas fonctionné ?
    Micniv vous proposait une ligne : avant l'ouverture du Recordset.
    Que donne cette ligne ?
    Qu'avez-vous modifié dans votre code ?
    Là on n'a pas assez d'éléments pour deviner
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

Discussions similaires

  1. [AC-2010] Erreur d’exécution 3061 : trop peu de paramètres. 1 attendu
    Par IceCrime752 dans le forum VBA Access
    Réponses: 7
    Dernier message: 10/02/2016, 10h36
  2. [AC-2010] Erreur d'exécution 3061: Trop peu de paramêtre 1 attendu
    Par acpsc dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/05/2013, 22h01
  3. [AC-2000] Erreur d'exécution '3061': - Trop peu de paramètres. 2 attendu
    Par zoom61 dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/05/2013, 10h36
  4. Réponses: 1
    Dernier message: 30/05/2007, 10h41
  5. Réponses: 4
    Dernier message: 15/03/2006, 16h47

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