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 :

Erreur d'exécution 3061, trop peu de paramètres (select)


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2005
    Messages : 105
    Points : 68
    Points
    68
    Par défaut Erreur d'exécution 3061, trop peu de paramètres (select)
    Bonjour,

    une table "Programmes" contenant les programmes et un table "Versions" contenant toutes les versions de tous les programmes.

    un formulaire programme et un sous-formulaire version (en mode continu) qui permet la saisie des différentes versions de chaque programme.

    Afin d'éviter à l'utilisateur de saisir les numéros de version, je souhaiterais les gérer automatiquement; j'ai développé le code suivant déclenché sur double-clic du numéro de version (par exemple)

    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
     
    Public Function genereNoVersion() As Long
    ' Fonction qui génère automatiquement le numéro de version
     
    Dim rst As DAO.Recordset
     
    Set rst = CurrentDb.OpenRecordset("SELECT MAX(NoVersion)AS MaxNoVersion FROM Versions WHERE Num_Programme = Screen.ActiveForm.ActiveControl.Form!ztNUMEROProg")
    ' ztNUMEROProg est un contrôle du sous-formulaire Version et contient la valeur de la PK de la table Programmes
     
    If IsNull(rst!MaxNoVersion.Value) Then
        'résultat de la requête vide, le rst retourne une ligne avec null dans la valeur
        genereNoVersion = 1
    Else
        genereNoVersion = rst.Fields("maxNoVersion").Value + 1
     
    End If
     
    rst.Close
    Set rst = Nothing
     
    End Function
    Ce code me retourne l'erreur suivante:
    Erreur d'exécution '3061'
    trop peu de paramètres. 1 attendu

    Ce qui m'étonne, c'est que si je remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Screen.ActiveForm.ActiveControl.Form!ztNUMEROProg
    par un numéro de programme en dur (par exemple 33), ça fonctionne.

    Est-ce que quelqu'un voit pourquoi ?

    Merci de votre aide.

    skeut

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Il faut partir du principe que coder des requêtes avec des éléments actifs du formulaire est voué à de nombreux problèmes...
    La preuve.
    Il faut éviter "le bidouillage" et il y a bien entendu des tas d'autres solutions pour récupérer le contenu de ton champ...
    On a eu l'idée un jour d'implémenté l'usage des variables dans le code VBA, je pense que tu peux t'en servir...

    Argy

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2005
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    Bonjour Argy

    merci pour la réponse; j'en prends bonne note.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
     
    Dim prog As Long
    prog = Screen.ActiveForm.ActiveControl.Form!ztNUMEROProg
     
    Dim rst As DAO.Recordset
     
    Set rst = CurrentDb.OpenRecordset("SELECT MAX(NoVersion)AS MaxNoVersion FROM Versions,Programmes WHERE Num_Programme = prog")
     
    ...
    En déclarant une variable et en utilisant cette variable dans ma requête, le problème persiste.

    Ai-je mal interprété le message?

    a+
    skeut

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par skeut
    Ai-je mal interprété le message?
    Oui,

    Là, tu as reculé pour mieux sauté
    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
    Public Function GenereNoVersion(ByVal NumProg As Long) As Long
    Dim rst As DAO.Recordset
    Dim SQLMax As String
    Dim lngNoVersion As Long
     
      SQLMax = "SELECT MAX(NoVersion)AS MaxNoVersion FROM Versions WHERE Num_Programme =" & NumProg
      Set rst = CurrentDb.OpenRecordset(SQLMax, 2)
      With rst
        If .EOF Then
          lngNoVersion = 1
        Else
          lngNoVersion = .Fields("maxNoVersion").Value + 1
        End If
        .Close
      End With
      Set rst = Nothing
      GenereNoVersion = lngNoVersion
    End Function
    Dans le champ de ton form, tu écris directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GenereNoVersion([ztNUMEROProg])
    Argy

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2005
    Messages : 105
    Points : 68
    Points
    68
    Par défaut
    ok, j'ai compris, j'ai beaucoup appris aujourd'hui

    merci pour l'aide et le cours de prog !

    skeut

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/03/2015, 20h08
  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. Erreur d'exécution 3061, trop peu de paramètres (select)
    Par Requiem11 dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/02/2008, 21h47
  5. Réponses: 1
    Dernier message: 30/05/2007, 10h41

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