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 35601' lors du remplissage treeview


Sujet :

Access

  1. #1
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut 'erreur 35601' lors du remplissage treeview
    salut à tous,

    je m'essaie sur le Treeview... je me suis inspiré sur plusieurs topic et jusque là tout fonctionnait (ou presque)
    Jusqu'à ce que je tombe sur 2 post:
    http://www.developpez.net/forums/showthread.php?t=33862
    http://www.developpez.net/forums/sho...d.php?t=183432

    Je copie dans une base vierge le code de Tofalu du post 183432
    et là une err me fais tourner chèvre
    j'ai une table tblEmploye avec les même champs
    J'ai un form F_treeview avec 1 seul ctrl le treeView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Load()
    Dim odb As DAO.Database
    Set odb = CurrentDb
    remplissageTreeView Forms!F_treeview!trvEmploye, odb
    End Sub
    et
    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
    Public Sub remplissageTreeView(oT As Object, odb As DAO.Database, Optional intEmploye As Integer = 0)
    Dim strSQL As String
    Dim oRst As DAO.Recordset
    Dim strLibelle As String
    strSQL = "SELECT NumEmploye,NomEmploye,PrenomEmploye,RoleEmploye FROM tblemploye WHERE Responsableemploye=" & intEmploye
    Set oRst = odb.OpenRecordset(strSQL)
     
    With oRst
        While Not .EOF
            'Récupère le nom, le prénom et le role
            strLibelle = .Fields(1).Value & " " & .Fields(2).Value & " (" & .Fields(3).Value & ")"
            'Test le cas de la racine
            If intEmploye = 0 Then
                oT.Nodes.Add "Emp" & .Fields(0).Value, strLibelle
            Else
                oT.Nodes.Add "Emp" & intEmploye, tvwChild, "Emp" & .Fields(0).Value, strLibelle
            End If
            'Lance le même traitement avec ce responsable
            remplissageTreeView oT, odb, .Fields(0).Value
            'Passe à l'enregistrement suivant
            .MoveNext
        Wend
    End With
    'Ferme le recordset
    oRst.Close
    Set oRst = Nothing
    End Sub
    voici l'erreur, qui survient au niv du 1er oT.nodes.Add:

    erreur d'exécution '35601'
    Element not Found


    si qq peut me sortir de là
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Merci d'utiliser un titre précis

  3. #3
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut 'erreur 35601' au remplissage d'un treeview
    je pensais qu'il l'était !!
    dsl
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  4. #4
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    Mais Tofalu, puisque tu es là, peux-tu jeter un oeil à mon soucis

    J'ai sans doute rater qqchose dans ton code!

    merci d'avance
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je ne vois pas...

    Que donne un msgbox du fields(0) du recordset ?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    bonjour,

    je crois voir d'ou viens le problème

    dans ta requête tu ne met pas les responsables en premier ce qui fais qu'un mployé peut etre créé avant un responsable dans ce qui crée le problème dont tu parles.
    il faut donc que tu crée la racine avec le responsable et après tu crées les noeuds enfants.

    bonne soirée

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est récurssif. Au premier passage seul les resp sont créés. Ils ont un Responsableemploy=0.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 047
    Points : 1 042
    Points
    1 042
    Par défaut
    bonjour,
    essaie

    oT.Nodes.Add , tvwchild,Emp" & .Fields(0).Value, strLibelle.

    Bonne journée

  9. #9
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    bonjour,

    le orst.fields(0), (1), (2), (3) ramenent bien le bon record:
    4,ETIENNE, Dominique, Directeur Général

    je ne comprends tjs pas ...
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  10. #10
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    [j'utilise Access 2000 SP3]
    mon objectif de départ, était de créer un form avec treeview qui me représentait mes machines outils par rapport aux ateliers où elles se trouvent.
    3 niv:
    - le noeud racine,
    - les noeuds correspondant aux ateliers
    - les machines

    Les petits plus agrémentant l'utilsation:
    -possibilité d'ajouter une machine, par l'ouverture d'un form indépendant (mais comment connaitre le BON noeud et comment remettre à jour le treeview sans le refermer et pointer sur la machine ainsi créée)
    - dans l'hypothèse, qu'une machine est disons Hors service, possibilité de la taguer par une icone différente

    voilà...
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Une idée, tu n'as peut être pas mis le bon treeview, du coup il ne trouve pas la collection nodes.

    J'avais utilisée Microsoft Treeview Control version 6

    Si c'est celui là, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Load()
    Dim odb As DAO.Database
    dim oT as treeview
    Set odb = CurrentDb
    set ot=Forms!F_treeview!trvEmploye
    msgbox ot.nodes.count
    remplissageTreeView ot, odb
    End Sub

  12. #12
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    J'ai dans mes Réf le MS common controls 6.0
    j'utilise bien le Microsoft Treeview Control version 6

    par contre qd j'applique ton bout de code, il me génère une err 'Incompatibilité de Type' sur Je l'ai remplacé par Object ou control et là même err que les autres post

    ça me barbe !!!


    alors calmement je refais tout en partant de ma table, et là encore un nouveau truc !! Invalid Key !!, lors du remplissage du tv, à la première occurence:

    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
    Private Sub RemplirTreeview()
     
    Dim strSQL As String
    Dim odb As DAO.Database
    Dim oRstAtelier As DAO.Recordset
    Dim orstMachine As DAO.Recordset
    Dim ctlTree As Control
     
    strSQL = "SELECT  * FROM T_ATELIER;"
    Set odb = CurrentDb
    Set oRstAtelier = odb.OpenRecordset(strSQL)
    Set ctlTree = Me.ctlTree
     
    While Not oRstAtelier.EOF
        ctlTree.Nodes.Add , , oRstAtelier.Fields("IDATELIER"), oRstAtelier.Fields("NOMATELIER")
    Wend
     
    odb.Close
    oRstAtelier.Close
    End Sub
     
     
     
    Private Sub Form_Load()
    RemplirTreeview
    End Sub
    comprends plus rien moi, c'est pourtant pas compliqué !!
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  13. #13
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Le invalide Key, c'est parce qu'une clé ne peut pas être numérique. C'est pour cela que j'avais concaténé avec "Emp"

    Or ici, oRstAtelier.Fields("IDATELIER") est numérique, il faut ruser comme moi

    Là tu vas placer dans le treeview tous les ateliers

  14. #14
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    arghh ...
    ok j'ai corrigé, mais pourquoi le Cstr(.fields(0)) ne marche pas non plus ?
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  15. #15
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Parce que ce noit pas être numérique au sens type numérique mais au sens que le contenu ne doit pas être numérique

  16. #16
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    bien, pas trouver de raison au bug ....

    alors j'ai refait mon bout de code et ça marche à ni rien comprendre

    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
    Private Sub RemplirTreeview()
     
    Dim strSQL As String
    Dim odb As DAO.Database
    Dim oRstAtelier As DAO.Recordset
    Dim oRstMachine As DAO.Recordset
    Dim ctlTree As Control
     
    strSQL = "SELECT  * FROM T_ATELIER;"
    Set odb = CurrentDb
    Set oRstAtelier = odb.OpenRecordset(strSQL)
    Set ctlTree = Me.ctlTree
     
    ctlTree.Nodes.Clear
     
    While Not oRstAtelier.EOF
        ctlTree.Nodes.Add , , "AT" & oRstAtelier.Fields("IDATELIER"), oRstAtelier.Fields("NOMATELIER"), 1, 2
            Set oRstMachine = odb.OpenRecordset("SELECT  * FROM T_MACHINE WHERE [NOATELIER]=" & oRstAtelier.Fields("IDATELIER") & ";")
            While Not oRstMachine.EOF
                'le IF pour tester l'image à afficher qd machine à l'arret
                If oRstMachine.Fields("ACTIVE") = True Then
                    ctlTree.Nodes.Add "AT" & oRstAtelier.Fields("IDATELIER"), tvwChild, "M" & oRstMachine.Fields("IDMACHINE"), oRstMachine.Fields("NOMMACHINE")
                  Else
                    ctlTree.Nodes.Add "AT" & oRstAtelier.Fields("IDATELIER"), tvwChild, "M" & oRstMachine.Fields("IDMACHINE"), oRstMachine.Fields("NOMMACHINE"), 3
                End If
                oRstMachine.MoveNext
            Wend
            oRstMachine.Close
        oRstAtelier.MoveNext
    Wend
     
    oRstAtelier.Close
    odb.Close
     
    End Sub
    Tofalu, peux me dire si la 2ème imbrication des Node peut être optimisé ?

    Voila, il ne me reste plus qu'à: trouver une méthode pour que qd j'ajoute un enreg, je pointe dessus dans le treeview

    Merci à tous ...
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  17. #17
    Membre actif
    Avatar de GAGNON
    Inscrit en
    Septembre 2003
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 201
    Points : 201
    Points
    201
    Par défaut
    Bon, à ni rien comprendre, j'ai tout refais de zéro et ça marche

    Tofalu, tu peux me dire si on peut optimiser la 2ème imbication de noeuds STP

    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
    Private Sub RemplirTreeview()
     
    Dim strSQL As String
    Dim odb As DAO.Database
    Dim oRstAtelier As DAO.Recordset
    Dim oRstMachine As DAO.Recordset
    Dim ctlTree As Control
     
    strSQL = "SELECT  * FROM T_ATELIER;"
    Set odb = CurrentDb
    Set oRstAtelier = odb.OpenRecordset(strSQL)
    Set ctlTree = Me.ctlTree
     
    ctlTree.Nodes.Clear
     
    While Not oRstAtelier.EOF
        ctlTree.Nodes.Add , , "AT" & oRstAtelier.Fields("IDATELIER"), oRstAtelier.Fields("NOMATELIER"), 1, 2
            Set oRstMachine = odb.OpenRecordset("SELECT  * FROM T_MACHINE WHERE [NOATELIER]=" & oRstAtelier.Fields("IDATELIER") & ";")
            While Not oRstMachine.EOF
                'le IF pour tester si un machine est à l'arret auquel cas => icone
                If oRstMachine.Fields("ACTIVE") = True Then
                    ctlTree.Nodes.Add "AT" & oRstAtelier.Fields("IDATELIER"), tvwChild, "M" & oRstMachine.Fields("IDMACHINE"), oRstMachine.Fields("NOMMACHINE")
                  Else
                    ctlTree.Nodes.Add "AT" & oRstAtelier.Fields("IDATELIER"), tvwChild, "M" & oRstMachine.Fields("IDMACHINE"), oRstMachine.Fields("NOMMACHINE"), 3
                End If
                oRstMachine.MoveNext
            Wend
            oRstMachine.Close
        oRstAtelier.MoveNext
    Wend
     
    oRstAtelier.Close
    odb.Close
     
    End Sub
    Pourquoi qd je remplace le type de ctlTree, j'obtient une err Type incompatible ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ctlTree As TreeView
    La pensée n'est qu'un éclair au milieu de la nuit. Mais c'est cet éclair qui est tout.
    Henri Poincaré

  18. #18
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Oui :

    Avec ta boucle sur les ateliers, on insere tous les ateliers.
    Une fois fini, on boucle sur toutes les machines

    Les boucles n'ont pas besoin d'être imbriquées

  19. #19
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je vois aussi cette possibilité où R01 est une requête joignant les deux tables

    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
    Private Sub Commande1_Click()
    Dim strSQL As String
    Dim odb As DAO.Database
    Dim oRstAtelier As DAO.Recordset
     
    Dim ctlTree As Control
     
    strSQL = "SELECT  * FROM T_ATELIER;"
    Set odb = CurrentDb
    Set oRstAtelier = odb.OpenRecordset("R01")
    Set ctlTree = Me.TreeView0
    While Not oRstAtelier.EOF
        AjouterUnNoeud ctlTree, oRstAtelier
        oRstAtelier.MoveNext
    Wend
    End Sub
     
    Function AjouterUnNoeud(oT As Control, oRst As DAO.Recordset)
    On Error GoTo err
    With oRst
        oT.Nodes.Add "AT" & .Fields("IDATELIER"), tvwChild, "M" & _
        .Fields("IDMACHINE"), .Fields("NOMMACHINE")
    End With
     
    fin:
        Exit Function
    err:
        Select Case err.Number
            Case 35601:
                With oRst
                    oT.Nodes.Add , , "AT" & .Fields("IDATELIER"), .Fields("NOMATELIER")
                    oT.Nodes.Add "AT" & .Fields("IDATELIER"), tvwChild, "M" & _
                    .Fields("IDMACHINE"), .Fields("NOMMACHINE")
                End With
            Case Else
                err.Raise err.Number
        End Select
        Resume fin
    End Function

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/09/2009, 21h34
  2. Erreur lors du remplissage d'un DataReader
    Par CUCARACHA dans le forum Accès aux données
    Réponses: 2
    Dernier message: 07/10/2008, 17h46
  3. erreur 35601 (Treeview)
    Par Otero dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2008, 21h39
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Erreur windows lors du malloc
    Par Elessar dans le forum C
    Réponses: 5
    Dernier message: 16/12/2003, 08h53

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