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

IHM Discussion :

[VBA Access 2002][Débutant] Problème Recordset


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut [VBA Access 2002][Débutant] Problème Recordset
    Bonjour,

    J'ai un problème lors de l'utilisation d'un Recordset. En effet, j'obtiens le message d'erreur suivant :
    Erreur d'exécution '3061' :
    Trop peu de paramètres. 1 attendu.


    Lorsque je clique sur Débogage, le débogueur s'arrête sur la dernière ligne de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim MonRS As DAO.Recordset
    Dim MaBDD As DAO.Database
     
    Set MaBDD = CurrentDb
    Set MonRS = MaBDD.OpenRecordset("SELECT AGENOM FROM AGENT WHERE AGEMATR = Modifiable0;", dbOpenDynaset, dbAppendOnly)
    Je ne vois pas du tout ce qui peut ne pas aller...
    Si je comprends bien, il me dit que je n'ai pas mis suffisamment de paramètres, pourtant il y a tout ce qu'il faut ! Ou bien alors j'ai fait une erreur tellement grosse que je ne la vois même pas

    Merci d'avoir pris le temps de lire mon problème, et merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    "SELECT AGENOM FROM AGENT WHERE AGEMATR = Modifiable0;"
    Dans cette ligne je pense qu'il y une erreur, je pense que tu veux passer en paramètre la valeur de ta liste appellée Modifiable0 si c'est le cas mets plutôt ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT AGENOM FROM AGENT WHERE AGEMATR = '" & Modifiable0.Value & "';"
    Il faut sortir de ta chaîne pour spécifier la valeur de ta liste

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Merci, avec les ' et les &, celà fonctionne beaucoup mieux !


    Merci beaucoup Dolphy35

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Mais j'ai maintenant une erreur avec la ligne suivante de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox "Le nom de l'agent est : " & MonRS.Fields("AGENOM").Value
    Erreur :
    Erreur d'exécution '3021' :
    Aucun enregistrement en cours


    Pourtant, je pense que ma requête SQL est correcte, donc encore une fois de plus, je ne vois pas ce qui ne va pas (décidément aujourd'hui, rien ne vas !)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Je viens de rajouter une condition pour savoir si MonRS est vide, voilà tout le code :

    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
     
    Dim MonRS As DAO.Recordset
    Dim MaBDD As DAO.Database
     
    Set MaBDD = CurrentDb
    Set MonRS = MaBDD.OpenRecordset("SELECT AGENOM FROM AGENT WHERE AGENUME = '" & Modifiable0 & "';", dbOpenDynaset, dbAppendOnly)
    MsgBox (Modifiable0)
     
    If MonRS.BOF Then
        If MonRS.EOF Then
            MsgBox "MonRS est vide !"
        End If
    End If
     
     
     
    MsgBox "Le nom de l'agent est : " & MonRS.Fields("AGENOM").Value

    La boîte de dialogue "MonRS est vide !" s'affiche, donc MonRS est vide
    Pourtant, j'ai vérifié ma requête, et je suis sûr qu'elle est correcte...

    Quelqu'un aurait-t-il une idée ?

    Merci d'avance

  6. #6
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    MsgBox "Le nom de l'agent est : " & MonRS.Fields("AGENOM").Value
    Cette ligne n'est pas bonne, Fields d'un Recordset est exprimer par un chiffre, 0 étant la colonne 1, si ton champ AGENOM est la troisième colonne tu met un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Le nom de l'agent est : " & MonRS.Fields(2)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Merci,

    Je me suis inspiré de ce tutoriel : http://warin.developpez.com/access/dao/?page=partie_5
    Chapitre 5.4.1
    C'est pour ça que j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox "Le nom de l'agent est : " & MonRS.Fields("AGENOM").Value
    Peut être est-ce incorrect, mais de toute façon, celà ne résoud quand même pas le problème que mon Recordset est bel et bien vide, puisque mon test affiche bien la boîte de dialogue "MonRS est vide !"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If MonRS.BOF Then
        If MonRS.EOF Then
            MsgBox "MonRS est vide !"
        End If
    End If



    Sinon, j'ai encore un peu de mal avec les Recordset :
    Quand je fais mon OpenRecordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRS = MaBDD.OpenRecordset("SELECT AGENOM FROM AGENT WHERE AGENUME = '" & Modifiable0 & "';", dbOpenDynaset, dbAppendOnly)
    Le SELECT va me sélectionner tout les enregistrements correspondants, mais le Recordset contient-il tout les champs de ces enregistrements, ou seulement le champ "AGENOM" ?


    Encore merci pour toutes ces réponses !

  8. #8
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    désolé c'est moi je divague.
    Tu peux mettre le nom de ton champ.

    Par contre ton Recordset possède bien tous les enregistrements selon ton critère et vu le code tu n'a que le champ "AGENOM" pour mettre l'ensemble des champs tu peux faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set MonRS = MaBDD.OpenRecordset("SELECT * FROM AGENT WHERE AGENUME = '" & Modifiable0 & "';" _
    , dbOpenDynaset, dbAppendOnly)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Merci Dolphy35 pour ces précisions !

    Sinon, une idée du pourquoi mon Recordset est toujours vide ? Sachant que ma requête est correcte, je l'ai vérifié plusieurs fois, et je sais qu'elle doit me retourner des résultats.

    Pour la requête, j'ai essayé les deux solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRS = MaBDD.OpenRecordset("SELECT * FROM AGENT WHERE AGENUME = '" & Modifiable0 & "';", dbOpenDynaset, dbAppendOnly)
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonRS = MaBDD.OpenRecordset("SELECT AGENOM FROM AGENT WHERE AGENUME = '" & Modifiable0 & "';", dbOpenDynaset, dbAppendOnly)
    Sachant parfaitement que les deux devraient me retourner des résultats... Mais non , ça veut pas . Ais-je oublié quelque chose ? Ais-je fais une erreur ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Apparement le problème viens de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbOpenDynaset, dbAppendOnly
    Pourtant :
    Recordset de type Dynaset :
    Un Recordset de type Dynaset correspond au résultat d'une instruction SQL retournant des enregistrements. Son contenu est dynamique et sa source peut être soit le nom d'une table, d'une requête ou bien une instruction SQL valide.

    dbAppendOnly :
    Permet aux utilisateurs d'ajouter de nouveaux enregistrements à l'objet Recordset, tout en leur interdisant de modifier ou de supprimer les enregistrements existants (objet Recordset de type Feuille de réponses dynamique Microsoft Jet (Dynaset) uniquement).



    Peut être que le dbAppendOnly empêche aussi la lecture ?
    Quelqu'un a son avis sur le problème ?

  11. #11
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    tu as essyé de les enlever ne rien mettre après ta chaîne SQL.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Oui, et en les enlevant, ça fonctionne correctement, c'est comme ça que j'en ai déduit que le problème venait de là.

    De toute façon ce n'est pas très grave si je ne les mets pas, là c'est juste pour ma culture personnelle, quand j'ai un problème comme ça, j'aime bien comprendre ce qui ne va pas !
    Donc si tu as une idée ou une info, je suis preneur .

    Merci.

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

Discussions similaires

  1. SQL dans VBA access 2002
    Par kryssy dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/06/2006, 21h25
  2. [VBA - ACCESS 2002] Problème RecordSet/Requête SQL
    Par SamLeChiseuji dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/06/2006, 10h01
  3. [VBA - ACCESS 2002] Cacher/désactiver un bouton
    Par SamLeChiseuji dans le forum IHM
    Réponses: 2
    Dernier message: 12/06/2006, 09h31
  4. [VBA Access 2002][Débutant] Gérer BDD en VBA
    Par SamLeChiseuji dans le forum Access
    Réponses: 6
    Dernier message: 06/06/2006, 14h02

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