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 :

Résultat d'une requête dans une liste


Sujet :

VBA Access

  1. #1
    Débutant
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 66
    Points
    66
    Par défaut Résultat d'une requête dans une liste
    Salut à tous, je suis débutant, j'essaye tant bien que mal d'apprendre VBA (avec Access).

    Je dispose de 3 tables dans mon projet access :
    - papy (id,nom)
    - papa (id,id_papy,nom)
    - fils (id,id_papa,nom)
    Comme vous le voyez, un papy se compose de papas, et un papa se compose de fils.

    Je cherche à afficher dans une liste tous les papys, avec tous leurs papa, et tous les fils des papas.
    En bref, je veux un truc du genre :

    papy1
    |-papa11
    |-papa12
    |--fils121
    papy2
    papy3
    |-papa31
    papy4
    |-papa41
    |-papa42
    |--fils421
    |--fils422

    ...etc, le tout affiché dans ma liste.

    Mon formulaire se compose d'une zone de liste toute bête, et d'un bouton.
    Et voici 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
    18
    19
    20
    21
    22
    23
    24
    25
     
    Private Sub Bouton_Click()
     
        Dim ChnSQL As String
        Dim res As Recordset
        Dim res2 As Recordset
        Dim res3 As Recordset
     
        Set db = CurrentDb()
     
        ChnSQL = "SELECT * FROM papy"
        Set res = db.OpenRecordset(ChnSQL)
     
        List1.RowSource = ""
     
        While Not res.EOF
            List1.AddItem (res!nom)
            ChnSQL = "SELECT * FROM papa WHERE papa.id_papy=papy.id"
            Set res2 = db.OpenRecordset(ChnSQL)
            While Not res2.EOF
                List1.AddItem (res2!nom)
            Wend
        Wend
     
    End Sub
    J'arrivais à afficher la liste des papys avec un SELECT* mais là j'ai modifié un peu mon while pour essayer d'afficher les papas des papys et c'est la cata : "Erreur d'exectution 3061 : Trop peu de paramètres. 1 attendu".

    Merci pour votre aide !

  2. #2
    Débutant
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 66
    Points
    66
    Par défaut
    C'est incompréhensible...

    Ce code marche :

    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
     
    Private Sub Commande10_Click()
     
        Dim ChnSQL As String
     
        Dim res As Recordset
        Dim res2 As Recordset
     
        Dim identifiant As String
     
        Set db = CurrentDb()
     
        ChnSQL = "SELECT * FROM papy;"
        Set res = db.OpenRecordset(ChnSQL)
     
        List1.RowSource = ""
     
        While Not res.EOF
            List1.AddItem (res!nom)
     
            ChnSQL = "SELECT * FROM papa WHERE id=11"
            Set res2 = db.OpenRecordset(ChnSQL)
            While Not res2.EOF
                List1.AddItem (res2!nom)
                res2.MoveNext
            Wend
     
            res.MoveNext
        Wend
     
    End Sub
    Mais celui-ci ne marche pas et marque "type de données incompatible dans l'expression du critère :

    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
     
    Private Sub Commande10_Click()
     
        Dim ChnSQL As String
     
        Dim res As Recordset
        Dim res2 As Recordset
     
        Dim identifiant As String
     
        Set db = CurrentDb()
     
        ChnSQL = "SELECT * FROM papy;"
        Set res = db.OpenRecordset(ChnSQL)
     
        List1.RowSource = ""
     
        While Not res.EOF
            List1.AddItem (res!nom)
     
            ChnSQL = "SELECT * FROM papa WHERE id_papy=1"
            Set res2 = db.OpenRecordset(ChnSQL)
            While Not res2.EOF
                List1.AddItem (res2!nom)
                res2.MoveNext
            Wend
     
            res.MoveNext
        Wend
     
    End Sub
    Pourtant il y a un bien un "id_papy" dans papa, et il y a bien un papy avec l'identifiant 1... Quel est le problème ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 226
    Points : 261
    Points
    261
    Par défaut
    pour un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChnSQL = "SELECT * FROM papa WHERE id=11"
    pour l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChnSQL = "SELECT * FROM papa WHERE id_papy=1"
    comme les deux champs existent (id et id_papy),

    l'un (id) est numérique (pas d'erreur)

    et l'autre devrait être texte (erreur de compatibilité)
    si c'est le cas, essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChnSQL = "SELECT * FROM papa WHERE id_papy='1'"

  4. #4
    Débutant
    Inscrit en
    Mars 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 258
    Points : 66
    Points
    66
    Par défaut
    Exact c'était ça l'erreur, dommage que tu ne sois pas venu plus tôt , merci beaucoup quand même.
    Maintenant ce que j'aimerai faire, c'est transformer ma liste en treeview, j'ouvre un autre post...

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

Discussions similaires

  1. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  2. Résultat d'un champ d'une requête dans une variable
    Par PsychedeChed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/01/2009, 12h50
  3. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  4. Réponses: 2
    Dernier message: 02/06/2006, 11h26
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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