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

Access Discussion :

Trop peu de paramètres, 1 attendu


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Enseigner
    Inscrit en
    Septembre 2022
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseigner
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2022
    Messages : 40
    Points : 35
    Points
    35
    Par défaut Trop peu de paramètres, 1 attendu
    Bonsoir le forum!

    J'ai un message d'erreur en exécutant le code ci-dessous: Erreur 3061: Trop peu de paramètres, 1 attendu
    Pourtant elle fonctionnait auparavant
    Un coucou à micniv qui me l'avait passé.

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    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, NomPrenom FROM R_classe_eleve" _
                 & " WHERE Classe_id=" & Me.classe_num _
                 & " GROUP BY Eleve_id, NomPrenom;"
        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") & "'"
     
        strSQL = "SELECT Matiere_id" _
                 & " FROM (SELECT Classe_id, Matiere_id, Devoir_id, Devoir_valide, Devoir_date" _
                 & " FROM T_DEVOIR" _
                 & " WHERE Devoir_valide = True AND " & s1 & ")" _
                 & " GROUP BY Matiere_id"
        Debug.Print strSQL
        Set rs1 = db1.OpenRecordset(strSQL, dbOpenSnapshot)
     
        If rs1.RecordCount = 0 Then
            MsgBox "Il n'y a aucun devoir noté pour cette classe dans la période saisie", vbInformation
            Exit Sub
        End If
     
        ' préparer la table temporaire
        ' 2020-10-20 modif
        strSQL = "DELETE FROM T_TEMP_MATIERE_MM " _
                 & " WHERE Classe_id= " & Me.classe_num & " AND semestre = '" & Nz(Me.Sem_libelle) & "'"
        db1.Execute strSQL
     
        rs1.MoveLast
        rs1.MoveFirst
        ' boucle sur les matière de la classe
        While Not rs1.EOF
     
            rs2.MoveLast
            rs2.MoveFirst
            ' Boucle sur les élèves de la classe
            While Not rs2.EOF
     
                ' nb et note moyenne des devoirs par matière pour cet eleve
                strSQL = "SELECT Classe_id, matiere_id, eleve_id, DevoirType_libelle, Count(Note_valeur) AS nbDeNotes, Sum(Note_valeur) AS sumDeNotes" _
                         & " FROM R_classe_eleve_note" _
                         & " WHERE Classe_id =" & Me.classe_num _
                         & " AND Matiere_id =" & rs1!Matiere_id _
                         & " AND format(devoir_date,'yyyymmdd') >= '" & Format(Me.date_deb, "yyyymmdd") & "'" _
                         & " AND format(devoir_date,'yyyymmdd') <= '" & Format(Me.date_fin, "yyyymmdd") & "'" _
                         & " AND Eleve_id =" & rs2!Eleve_id _
                         & " GROUP BY Classe_id, matiere_id, Eleve_id, DevoirType_libelle" _
                         & " HAVING DevoirType_libelle = 'DV'"
                Debug.Print strSQL
                Set rs3 = db1.OpenRecordset(strSQL, dbOpenSnapshot)
                Debug.Print rs3.RecordCount
                If rs3.RecordCount > 0 Then
                    strSQL = "INSERT INTO T_TEMP_MATIERE_MM " _
                             & " (Classe_id, Matiere_id, Eleve_id, semestre, date_debut, date_fin, DV_nb, DV_moy) VALUES" _
                             & " (" & Me.classe_num & "," & rs1!Matiere_id & "," & rs2!Eleve_id & ",'" & Me.Sem_libelle _
                             & "', #" & Format(Me.date_deb, "mm/dd/yyyy") & "# , #" & Format(Me.date_fin, "mm/dd/yyyy") & "#," _
                             & rs3!nbDeNotes & ",'" & Round(rs3!SumDeNotes / rs3!nbDeNotes, 2) & "')"
                    Debug.Print strSQL
                    db1.Execute strSQL
                    Debug.Print db1.RecordsAffected
                Else
                    ' aucun DV
                    strSQL = "INSERT INTO T_TEMP_MATIERE_MM " _
                             & " (Classe_id, Matiere_id, Eleve_id, semestre, date_debut, date_fin, DV_nb, DV_moy) VALUES" _
                             & " (" & Me.classe_num & "," & rs1!Matiere_id & "," & rs2!Eleve_id & ",'" & Me.Sem_libelle _
                             & "', #" & Format(Me.date_deb, "mm/dd/yyyy") & "# , #" & Format(Me.date_fin, "mm/dd/yyyy") & "#," _
                             & 0 & ",'0')"
                    db1.Execute strSQL
                    Debug.Print db1.RecordsAffected
                End If
     
                ' nb et note moyenne des CP pour cet eleve (en principe : nb CP = 1)
                strSQL = "SELECT Classe_id, matiere_id, Eleve_id, DevoirType_libelle, Count(Note_valeur) AS nbDeNotes, Sum(Note_valeur) AS sumDeNotes" _
                         & " FROM R_classe_eleve_note" _
                         & " WHERE Classe_id =" & Me.classe_num _
                         & " AND Matiere_id =" & rs1!Matiere_id _
                         & " AND format(devoir_date,'yyyymmdd') >= '" & Format(Me.date_deb, "yyyymmdd") & "'" _
                         & " AND format(devoir_date,'yyyymmdd') <= '" & Format(Me.date_fin, "yyyymmdd") & "'" _
                         & " AND Eleve_id =" & rs2!Eleve_id _
                         & " GROUP BY Classe_id, Matiere_id, Eleve_id, DevoirType_libelle" _
                         & " HAVING DevoirType_libelle = 'CP'"
                Debug.Print strSQL
                Set rs3 = db1.OpenRecordset(strSQL, dbOpenSnapshot)
                Debug.Print rs3.RecordCount
                If rs3.RecordCount > 0 Then
                    strSQL = "UPDATE T_TEMP_MATIERE_MM SET " _
                             & "  CP_nb =" & rs3!nbDeNotes & "," _
                             & "  CP_moy = '" & Round(rs3!SumDeNotes / rs3!nbDeNotes, 2) & "' " _
                             & " WHERE Classe_id =" & Me.classe_num _
                             & " AND Matiere_id =" & rs1!Matiere_id _
                             & " AND Eleve_id =" & rs2!Eleve_id _
                             & " AND date_debut = #" & Format(Me.date_deb, "mm/dd/yyyy") & "#"
                    Debug.Print strSQL
                    db1.Execute strSQL
                    Debug.Print db1.RecordsAffected
                Else
                    ' pas de CP
                    strSQL = "UPDATE T_TEMP_MATIERE_MM SET " _
                             & "  CP_nb = 0 ," _
                             & "  CP_moy = 0 " _
                             & " WHERE Classe_id =" & Me.classe_num _
                             & " AND Matiere_id =" & rs1!Matiere_id _
                             & " AND Eleve_id =" & rs2!Eleve_id _
                             & " AND date_debut = #" & Format(Me.date_deb, "mm/dd/yyyy") & "#"
                    Debug.Print strSQL
                    db1.Execute strSQL
                    Debug.Print db1.RecordsAffected
     
                End If
     
    NEXT_ELEVE:
                rs2.MoveNext
            Wend
     
    NEXT_MATIERE:
            rs1.MoveNext
        Wend
     
     
        ' Calcul de MM
        Call ComputeMM    ' programme ci-dessous
     
        MsgBox "Traitement terminé"
     
    Exit_0:
        Set rs3 = Nothing
        Set rs2 = Nothing
        Set rs1 = Nothing
        Set db1 = Nothing
     
    End Sub
    L'erreur se situe au niveau de la ligne 32: Set rs2 = db1.OpenRecordset(strSQL, dbOpenSnapshot). Elle est colorée en jaune à l'exécution du code.

    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 840
    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 840
    Points : 14 944
    Points
    14 944
    Par défaut
    bonsoir,
    tu utilises la requête R_classe_eleve qui doit probablement utiliser un critère externe (soit un paramètre, soit un champ de formulaire) sur un champ de la requête. Mais comme VBA n'aime pas du tout ça, il faudrait revoir la conception de la requête pour ne pas avoir à utiliser ces critères sur les champs ou les passer au moment de la définition de la requête (QueryDef) en mode dynamique.
    Dis comme comme ça, je suppose que ça ne te parlera pas beaucoup mais si tu fais une recherche sur le forum avec ".parameters", tu devrais trouver quelques discussions comme celle-ci ou celle-là qui se réfèrent à l'erreur 3061 concernant l'utilisation de paramètres.
    Bien entendu, cela demande un minimum de maitrise de VBA, si ce n'est pas ton cas, poste le code SQL de ta requête R_classe_eleve pour qu'on puisse te donner des pistes

  3. #3
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    re
    C'est votre L29 qui doit poser problème et notamment le R_classe_eleve et un ou des critères provenant de votre frm
    Le plus simple serait de développer la totalité de la syntaxe de cette query dans votre strSql. Ou faire dans ce style ou dans ce style

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Enseigner
    Inscrit en
    Septembre 2022
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseigner
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2022
    Messages : 40
    Points : 35
    Points
    35
    Par défaut RE
    Citation Envoyé par tee_grandbois Voir le message
    bonsoir,
    tu utilises la requête R_classe_eleve qui doit probablement utiliser un critère externe (soit un paramètre, soit un champ de formulaire) sur un champ de la requête. Mais comme VBA n'aime pas du tout ça, il faudrait revoir la conception de la requête pour ne pas avoir à utiliser ces critères sur les champs ou les passer au moment de la définition de la requête (QueryDef) en mode dynamique.
    Dis comme comme ça, je suppose que ça ne te parlera pas beaucoup mais si tu fais une recherche sur le forum avec ".parameters", tu devrais trouver quelques discussions comme celle-ci ou celle-là qui se réfèrent à l'erreur 3061 concernant l'utilisation de paramètres.
    Bien entendu, cela demande un minimum de maitrise de VBA, si ce n'est pas ton cas, poste le code SQL de ta requête R_classe_eleve pour qu'on puisse te donner des pistes
    Le code SQL R_classe_eleve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_CLASSES.Classe_id, T_CLASSES.Classe_libelle, T_ELEVES.Eleve_id, T_ELEVES.NomPrenom, T_ELEVES.Prenom_el, T_ELEVES.Nom_el, T_ELEVES.Datenaiss, T_ELEVES.Lieunaiss, T_ELEVES.Sexe_id, T_ELEVES.NiveauRepris_id AS Expr1, T_ELEVES.Observations, T_ELEVES.Sem1_Hon, T_ELEVES.Sem2_Hon, T_ELEVES.Admis, T_ELEVES.Redouble, T_ELEVES.Exclu, T_ELEVES.MoyPassage, T_ENTETE.Republique, T_ENTETE.Ministere, T_ENTETE.Academie, T_ENTETE.Ief, T_ENTETE.Etablissement, T_ENTETE.AnScolaire, T_ENTETE.Drapeau, T_ENTETE.logoMin, T_ENTETE.logoApp, T_ELEVES.Photos
    FROM T_ENTETE INNER JOIN (T_CLASSES INNER JOIN T_ELEVES ON T_CLASSES.Classe_id = T_ELEVES.Classe_id) ON T_ENTETE.Entete_id = T_ELEVES.Entete_id
    ORDER BY T_CLASSES.Classe_libelle, T_ELEVES.NomPrenom;

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Enseigner
    Inscrit en
    Septembre 2022
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseigner
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2022
    Messages : 40
    Points : 35
    Points
    35
    Par défaut RE
    Citation Envoyé par hyperion13 Voir le message
    re
    C'est votre L29 qui doit poser problème et notamment le R_classe_eleve et un ou des critères provenant de votre frm
    Le plus simple serait de développer la totalité de la syntaxe de cette query dans votre strSql. Ou faire dans ce style ou dans ce style

    Salut
    J'ai exploré vos pistes mais je ne m'en sors. J'ai vraiment besoin d'aide car avec ce problème c'est une bonne partie de mon application qui est bloquée: je n'arrive plus à calculer les moyennes donc je ne pourrai plus imprimer de bulletin.

  6. #6
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    re,
    J'ai reproduit une qry selon vos éléments fournis. (img)
    Que j'utilise le 2ème ou le 3ème strSql (img) la syntaxe est correcte et ne génère aucune erreur.
    A mon humble avis c'est votre UAG qui pose problème.
    Dans votre R_classe_eleve, mettez en dur un classe_num dans le critère classe_id et exécutez cette qry pour vérifier si elle retourne un résultat et non pas une erreur.
    Et je ne comprends pas le T_ELEVES.NiveauRepris_id AS Expr1 !
    Images attachées Images attachées  

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Enseigner
    Inscrit en
    Septembre 2022
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseigner
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2022
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par hyperion13 Voir le message
    re,
    J'ai reproduit une qry selon vos éléments fournis. (img)
    Que j'utilise le 2ème ou le 3ème strSql (img) la syntaxe est correcte et ne génère aucune erreur.
    A mon humble avis c'est votre UAG qui pose problème.
    Dans votre R_classe_eleve, mettez en dur un classe_num dans le critère classe_id et exécutez cette qry pour vérifier si elle retourne un résultat et non pas une erreur.
    Et je ne comprends pas le T_ELEVES.NiveauRepris_id AS Expr1 !
    J'ai pu corriger l'erreur hier soir. Oui c'était bien le T_ELEVES.NiveauRepris_id AS Expr1

    Et Merci encore une fois Hyperion13. Hyper diligent et Hyper spontané!

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

Discussions similaires

  1. Erreur 3061 : Trop peu de paramètres.1 attendu
    Par deglingo37 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 05/12/2014, 19h55
  2. 3061 Trop peu de paramètres. 1 attendu
    Par bernez dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/05/2007, 14h16
  3. Réponses: 11
    Dernier message: 07/09/2006, 10h10
  4. Réponses: 3
    Dernier message: 04/04/2006, 19h59
  5. erreur trop peu de paramétre. un attendu ??
    Par Amandine62 dans le forum ASP
    Réponses: 3
    Dernier message: 25/01/2005, 15h00

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