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

VB 6 et antérieur Discussion :

[VB]résultat requête dans un tableau


Sujet :

VB 6 et antérieur

  1. #1
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut [VB]résultat requête dans un tableau
    bonjour à tous,

    j'aimerai savoir comment je peux mettre les résultats d'une requête sql dans un tableau préalablement déclaré, de manière à pouvoir en utiliser les éléments.

    Pour être clair, je suis entrain d'utiliser un treeview. Je voudrai generer dynamiquement les noeuds en fonction des résultats d'un requete.

    Exemple: Une classe a plusieurs élèves
    le noeud parent est le nom de la classe
    les noeuds enfants doivent être les noms des élèves appartenant à cette classe. Ces noms proviendront de la base grace à une requete sql.

    Est ce que cela est possible?
    merci

  2. #2
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Plus de précision.

    Avec un tableau de valeurs, j'aurai ce treeview dynamique:

    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
     
    Dim A As Variant
     
    A = Array(10, 20, 30)
     
    TreeView1.LineStyle = tvwRootLines
     
       Dim nodX As Node
       Set nodX = TreeView1.Nodes.Add(, , , "Essai")
     
            For i = 0 To 2 
                Set nodX = TreeView1.Nodes.Add(1, tvwChild, , "Essai" & A(i))
                Next i
     
    ' Assure que tous les nœuds soient visibles.
             nodX.EnsureVisible
    J'ai un noeud parent "Essai", et ces neouds fils sont Essai10, Essai20, Essai30.

    Maintenant, j'ai cette requete sql et le code de treeview:

    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
     
    Dim i, j As Integer
     
    Dim SqlD, tabl, var, var1 As String
     
    SqlD = "SELECT Nom_pers, Deno_classe
    FROM Eleve, Classe
    WHERE (Eleve.Id_classe = Classe.Id_classe)
    AND (Classe.Id_classe = 'Cl005')"
     
       setuser.CursorLocation = adUseServer
        setuser.Open SqlD, geststage, adOpenKeyset, adLockOptimistic, adCmdText
     
          If setuser.RecordCount > 0 Then
                 j = setuser.RecordCount 
             For i = 0 To j
                   var(i) = setuser!Nom_pers  ' (pb1)
                    tabl = Array( var(i) )
             Next i
         End if
     
         var1 = setuser!Deno_classe
    Set setuser = Nothing
     
    TreeView1.LineStyle = tvwRootLines
     
       Dim nodX As Node
       Set nodX = TreeView1.Nodes.Add(, , , var1)
     
            For i = 0 To j
                Set nodX = TreeView1.Nodes.Add(1, tvwChild, , tabl(i)) '(pb2)
              Next i
     
    ' Assure que tous les nœuds soient visibles.
              nodX.EnsureVisible
    Mes deux problemes sont aux niveaux pb1 et pb2.

    Comment dois je faire pour stocker les noms des éleves de la classe "Cl005" dans un tableau pour les générer dans les noeuds enfants?

    Personne n'est inspiré?

  3. #3
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2005
    Messages : 64
    Par défaut
    salut
    je vois pas pourquoi utiliser un le tableau, tu peut utiliser directement ton curseur:

    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
     
    Dim SqlD
     
    SqlD = "SELECT Nom_pers, Deno_classe 
    FROM Eleve, Classe 
    WHERE (Eleve.Id_classe = Classe.Id_classe) 
    AND (Classe.Id_classe = 'Cl005')" 
     
       setuser.CursorLocation = adUseServer 
        setuser.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly,adCmdText 
     
       TreeView1.LineStyle = tvwRootLines 
        Dim nodX As Node 
       Set nodX = TreeView1.Nodes.Add(, , , setuser!Deno_classe ) 
     
        while not setuser.EOF
              Set nodX = TreeView1.Nodes.Add(1, tvwChild, ,setuser!Nom_pers)
              setuser!.movenext
        wend
          setuser.close
    set setuser=nothing
    ' Assure que tous les n?uds soient visibles. 
              nodX.EnsureVisible
    pour les tableau si tu veut utiliser comme même alors tu doit déclarer un tableau dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim tb() as string 
     
    et don le code tu change sa taille par l'instruction :
    la première fois redim tb(0)
    ensuite redim preserve (3) pour conserver les anciennes données.

  4. #4
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Amri_Daly,

    Grand merci pour la pichnette!
    ça marche nickel

    Seulement, il faut enlever le point d'exclamation sur le 2nd setuser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while not setuser.EOF 
              Set nodX = TreeView1.Nodes.Add(1, tvwChild, ,setuser!Nom_pers) 
              setuser!.movenext 
        wend
    qui devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while not setuser.EOF 
              Set nodX = TreeView1.Nodes.Add(1, tvwChild, ,setuser!Nom_pers) 
              setuser.movenext 
        wend

  5. #5
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2005
    Messages : 64
    Par défaut
    ok, n'oubli pas "resolut"

  6. #6
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Salut, Amri_Daly

    Je reviens sur le code. Je voudrai maintenant qu'à chaque classe puisse correspondre les élèves de celle-ci, sans spécifier une classe particulière.

    Le code suivant me donne une seule classe qui apparait plusieurs fois, sans que les autres n'apparaissent.
    Le problème se trouve au niveau du premier argument de l'ajout du noeud enfant. Je vois qu'il faut remplacer 1 par un index qui prendra en compte le fait qu'il y a beaucoup de classes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        while not setuser.EOF 
              Set nodX = TreeView1.Nodes.Add(1, tvwChild, ,setuser!Nom_pers) ' Remplacer 1 par un autre index 
              setuser!.movenext 
        wend
    Voici le code entier:


    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
     
    Dim SqlD 
     
    SqlD = "SELECT Nom_pers, Deno_classe 
    FROM Eleve, Classe 
    WHERE (Eleve.Id_classe = Classe.Id_classe)" 
     
     
       setuser.CursorLocation = adUseServer 
        setuser.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly,adCmdText 
     
       TreeView1.LineStyle = tvwRootLines 
        Dim nodX As Node 
       Set nodX = TreeView1.Nodes.Add(, , , setuser!Deno_classe ) 
     
        while not setuser.EOF 
              Set nodX = TreeView1.Nodes.Add(1, tvwChild, ,setuser!Nom_pers) 
              setuser.movenext 
        wend 
          setuser.close 
    set setuser=nothing 
    ' Assure que tous les n?uds soient visibles. 
              nodX.EnsureVisible
    un coup de pouce?

  7. #7
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2005
    Messages : 64
    Par défaut
    bonjour
    tu réalise ça sur deux boucle :
    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
     
    Dim SqlD,setClass as recordset
     
    'Ouvre un curesseur sur la table calss
    SqlD= "SELECT Id_classe,Deno_classe FROM Classe" 
    set setclass=new recordset
    setclass.open SQLD,geststage,adOpenForwardOnly, adLockReadOnly,adCmdText 
     
    SqlD = "SELECT Classe.Id_classe,Deno_classe,Nom_pers FROM Eleve INNER JOIN Classe  ON Eleve.Id_classe = Classe.Id_classe ORDER BY Classe.Id_classe" 
     
        setuser.CursorLocation = adUseClient
        setuser.Open SqlD, geststage, adOpenStatic, adLockReadOnly,adCmdText 
     
       TreeView1.LineStyle = tvwRootLines 
        Dim nodX As Node ,idC as string 
        TreeView1.Nodes.Clear   'efasser tous les noeuds
        while not setCalss.EOF
               idc=setClass!Id_classe     'c'est la cléf du noeud père elle doit commencer par  un caractère, si le ID_Class est numirique tu peux écrire idc="C" & setClass!Id_classe
              Set nodX = TreeView1.Nodes.Add(, ,idc , setClass!Deno_classe ) 
               setuser.Filter="Id_classe='" & setClass!Id_classe & "'"   'le cursseur n'affiche que les élève de cette calsse
               while not setuser.EOF 
                      Set nodX = TreeView1.Nodes.Add(idc, tvwChild, ,setuser!Nom_pers) 
                      setuser.movenext 
               wend 
               setuser.Filter=0
               setclass.movenext
          wend
          setuser.close 
          set setuser=nothing 
          setCalss.close 
          set setCalss=nothing 
     
    ' Assure que tous les n?uds soient visibles. 
              nodX.EnsureVisible[quote][/quote]

  8. #8
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Salut, Amri_Daly

    le code marche à merveille!!!
    Grand merci


  9. #9
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    bonsoir, Amri_Daly

    je suis à la fin de mon apprentissage sur la manipulation des treeviews grâce à toi.
    je ne voudrai pas abuser de ton temps,mais juste une dernière précision.
    je veux ajouter un 3è niveau de noeud, chaque élève a des matières d'option.
    j'ai ajouter une 3è boucle qui marche, mais pas très bien puisqu'il ne sort qu'un seul enregistrement.

    Revoici 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
    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
     
    Dim SqlD, setClass, setClass2 As Recordset
     
    SqlD = "SELECT Id_classe,Deno_classe FROM Classe"
    Set setClass = New Recordset
    setClass.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
     
    SqlD = "SELECT Classe.Id_classe,Deno_classe,Nom_pers FROM Eleve INNER JOIN Classe  ON Eleve.Id_classe = Classe.Id_classe ORDER BY Classe.Id_classe"
    Set setClass2 = New Recordset
    setClass2.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
     
     
    SqlD = "SELECT Eleve.Id_perso, loisirs FROM Eleve INNER JOIN TabLoi ON Eleve.Id_perso = TabLoi .Id_perso ORDER BY Eleve.Id_perso"
     
       setuser.CursorLocation = adUseServer
        setuser.Open SqlD, geststage, adOpenKeyset, adLockOptimistic, adCmdText
     
    '
    TreeView1.LineStyle = tvwRootLines
        TreeView1.Nodes.Add , , "c", "Classes", 1 ' Véritable père avec un seul noeud et sa clé est "c"
        Dim idC, idC2 As String, nodX As node
        tvwDB.Nodes.Clear   'effacer tous les noeuds
        While Not setClass.EOF
               idC = setClass!id_classe   
     
              Set nodX = TreeView1.Nodes.Add("c", tvwChild, idC, setClass!Deno_classe, 1) 'le dernier chiffre est l'index de l'image
               setClass.Filter = "Id_classe='" & setClass!id_classe & "'" 'le cursseur n'affiche que les élève de cette calsse
     
                While Not setClass2.EOF
                idC2 = setClass2!id_perso
                Set nodX = TreeView1.Nodes.Add(idC, tvwChild, idC2, setClass2!Nom_pers , 1)
     
     
                    While Not setuser.EOF
                        Set nodX = TreeView1.Nodes.Add(idC2, tvwChild, , setuser!loisirs, 1)
                        setuser.MoveNext
                    Wend
     
                setClass2.Filter = "id_perso='" & setClass2!id_perso & "'" 
               setClass2.MoveNext
            Wend
                setuser.Filter = 0
               setClass.MoveNext
     
          Wend
          setuser.Close
          Set setuser = Nothing
          setClass2.Close
          Set setClass2 = Nothing
          setClass.Close
          Set setClass = Nothing
    ' Assure que tous les n?uds soient visibles.
              nodX.EnsureVisible
    En résultat, j'ai un noeud père "Classes" avec une seule classe, cette classe affiche un seul élève, qui lui même affiche tous ces loisirs.

    Je me plante sur l'imbrication des boucles.
    un dernier coup de pouce?

  10. #10
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Ouf!!!
    j'ai trouvé la faille!!!

    je me gourais sur la selection des filtres en fonction du recordset

    Voici le code corrigé pour ceux qui sont intéressés:


    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
    Dim SqlD, setClass, setClass2 As Recordset 
     
    SqlD = "SELECT Id_classe,Deno_classe FROM Classe" 
    Set setClass = New Recordset 
    setClass.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText 
     
     
    SqlD = "SELECT Classe.Id_classe,Deno_classe,Nom_pers FROM Eleve INNER JOIN Classe  ON Eleve.Id_classe = Classe.Id_classe ORDER BY Classe.Id_classe" 
    Set setClass2 = New Recordset 
    setClass2.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText 
     
     
     
    SqlD = "SELECT Eleve.Id_perso, loisirs FROM Eleve INNER JOIN TabLoi ON Eleve.Id_perso = TabLoi .Id_perso ORDER BY Eleve.Id_perso" 
     
       setuser.CursorLocation = adUseServer 
        setuser.Open SqlD, geststage, adOpenKeyset, adLockOptimistic, adCmdText 
     
    ' 
    TreeView1.LineStyle = tvwRootLines 
        TreeView1.Nodes.Add , , "c", "Classes", 1 ' Véritable père avec un seul noeud et sa clé est "c" 
        Dim idC, idC2 As String, nodX As node 
        tvwDB.Nodes.Clear   'effacer tous les noeuds 
        While Not setClass.EOF 
               idC = setClass!id_classe    
     
              Set nodX = TreeView1.Nodes.Add("c", tvwChild, idC, setClass!Deno_classe, 1) 'le dernier chiffre est l'index de l'image 
               setClass2.Filter = "Id_classe='" & setClass!id_classe & "'" 'le cursseur n'affiche que les élève de cette calsse (setClass2 au lieu de setClass)
     
                While Not setClass2.EOF 
                idC2 = setClass2!id_perso 
                Set nodX = TreeView1.Nodes.Add(idC, tvwChild, idC2, setClass2!Nom_pers , 1) 
                setuser.Filter = "id_perso='" & setClass2!id_perso & "'"  ' (setuser au lieu de setClass2)
     
                    While Not setuser.EOF 
                        Set nodX = TreeView1.Nodes.Add(idC2, tvwChild, , setuser!loisirs, 1) 
                        setuser.MoveNext 
                    Wend 
     
     
               setClass2.MoveNext 
            Wend 
                setuser.Filter = 0 
               setClass.MoveNext 
     
          Wend 
          setuser.Close 
          Set setuser = Nothing 
          setClass2.Close 
          Set setClass2 = Nothing 
          setClass.Close 
          Set setClass = Nothing 
    ' Assure que tous les n?uds soient visibles. 
              nodX.EnsureVisible

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut
    Bonjour,

    Je suis assez débutant dans le vb et j'ai repris ton code pour créer un treeview avec une relation vers la bd access.

    j'ai un soucis dès le départ. Il ne reconnait pas la ligne :
    "Set setClass = New Recordset" --> problème avec le "New"
    C'est peu être une bétise, même surement.
    Voici le code complet :

    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
    Set adoConnection = New ADODB.Connection
    Set adoRecordSet = New ADODB.Recordset
    ConnectionString = "Provider = Microsoft.Jet.OLEDB.3.51;" & " Data Source = C:\TFE\Stock2.mdb"
    adoConnection.Open ConnectionString
    adoRecordSet.Open "CATEGORIE", adoConnection
     
     
    Dim SqlD, setClass, setClass2, setClass3, setClass4, setClass5 As Recordset
     
    SqlD = "SELECT Id_Categorie,Int_Categorie FROM CATEGORIE ORDER BY Int_Categorie"
    Set setClass = New Recordset 'la est le problème
    setClass.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
     
    SqlD = "SELECT Id_Sous-Categorie1,Int_Sous-Categorie1 FROM SOUS-CATEGORIE ORDER BY Int_Sous-Categorie1"
    Set setClass2 = New Recordset
    setClass2.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT Id_Sous-Categorie2,Int_Sous-Categorie2 FROM SOUS-CATEGORIE2 ORDER BY Int_Sous-Categorie2"
    Set setClass3 = New Recordset
    setClass3.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT Id_Sous-Categorie3,Int_Sous-Categorie3 FROM SOUS-CATEGORIE3 ORDER BY Int_Sous-Categorie3"
    Set setClass4 = New Recordset
    setClass4.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT Id_Fourniture,Denomination FROM FOURNITURE ORDER BY Denomination"
    Set setClass5 = New Recordset
    setClass5.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    TreeView1.LineStyle = tvwRootLines
    TreeView1.Nodes.Add , , "c", "Catégories", 1 ' Véritable père avec un seul noeud et sa clé est "c"
    Dim idC, idC2, idC3, idC4 As String, nodX As Node
    tvwDB.Nodes.Clear   'effacer tous les noeuds
     
    While Not setClass.EOF
       idC = setClass!id_Categorie
       Set nodX = TreeView1.Nodes.Add("c", tvwChild, idC, setClass!Int_categorie)
       setClass2.Filter = "Id_Categorie='" & setClass!id_Categorie & "'"
     
       While Not setClass2.EOF
          idC2 = setClass2!id_Sous - Categorie1
          Set nodX = TreeView1.Nodes.Add(idC, tvwChild, idC2, setClass2!Int_Sous - Categorie1)
          setClass3.Filter = "id_Sous-Categorie1='" & setClass2!id_Sous - Categorie1 & "'"
     
          While Not setClass3.EOF
             idC3 = setClass3!id_Sous - Categorie2
             Set nodX = TreeView1.Nodes.Add(idC2, tvwChild, idC3, setClass3!Int_Sous - Categorie2)
             setClass4.Filter = "id_Sous-Categorie2='" & setClass3!id_Sous - Categorie2 & "'"
     
             While Not setClass4.EOF
                idC4 = setClass4!id_Sous - Categorie3
                Set nodX = TreeView1.Nodes.Add(idC3, tvwChild, idC4, setClass4!Int_Sous - Categorie3)
                setClass5.Filter = "id_Sous-Categorie3='" & setClass4!id_Sous - Categorie3 & "'"
     
                While Not setClass5.EOF
                Set nodX = TreeView1.Nodes.Add(idC4, tvwChild, , setClass5!Denomination)
                setClass5.MoveNext
                Wend
     
                setClass4.MoveNext
             Wend
     
             setClass3.MoveNext
          Wend
     
          setClass2.MoveNext
       Wend
     
       setuser.Filter = 0
       setClass.MoveNext
    Wend
     
    setClass5.Close
    Set setClas5 = Nothing
    setClass4.Close
    Set setClas4 = Nothing
    setClass3.Close
    Set setClas3 = Nothing
    setClass2.Close
    Set setClass2 = Nothing
    setClass.Close
    Set setClass = Nothing
     
    ' Assure que tous les noeuds soient visibles.
    nodX.EnsureVisible
     
    adoRecordSet.Close
    adoConnection.Close
     
    Set adoConnection = Nothing
    Set adoRecordSet = Nothing"
    Ce serait gentil que vous me disiez ce que vous en pensez.
    Merci

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Ben, je dirais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set setClass = New ADODB.Recordset
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut
    Citation Envoyé par AlainTech
    Ben, je dirais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set setClass = New ADODB.Recordset
    C'est déjà une première bonne réponse, lol.

    Je te remercie. Cela bloque à d'autres endroits, mais je vais chercher quand même.

    Si je commence à m'arracher mes cheveux, et si tu veux bien, je ferai appel à tes connaissances.

    Merci

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut
    salut AlainTech,


    Je crois que je pars dans le mur.

    Il met une erreur du type "Méthode ou membres de données introuvable"
    pour la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setClass5.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
    Si je met cette ligne la en commentaire, il continue et me met une erreur du type "Erreur d'exécution 3001 - les arguments sont de types incorrect, en dehors des limites ou en conflits les uns les autres" pour la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setClass.Open SqlD, geststage, adOpenForwardOnly, adLockReadOnly, adCmdText
    A mon avis, je vais tous effacer et le recommencer, que crois-tu?
    Connais-tu peut être un bon tutorial en français d'un treeview avec connection à une base de données access pour ne pas que je te dérange tout le temps. J'ai regardé sur google, mais je ne vois rien de clair.

    merci d'avance pour ta réponse

  15. #15
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    salut,

    ton code ne peut pas marcher à l'état actuel pour 2 raisons:
    1- tu utilises un nom de connection que tu n'as déclaré nulle part (geststage)
    2- la connection avec la base de données s'est faite avec ODBC et non avec ta méthode.

    tu as deux solutions:
    1- tu optes pour la connection à la base avec odbc et tu crées un module dans ton projet vb et colle le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public geststage As Connection
     
    Public Sub Main()
    Set geststage = New Connection ' tu vois d'où vient le nom geststage
        geststage.ConnectionString = "dsn=yango" 'yango est un nom de votre choix
        geststage.Open
        MDIfrmAccueil.Show 'nom de votre feuille( ici c'est la feuille MDI) 
     
    End Sub
    Note: 1- 1- si tu n'as pas de feuille MDI, mets la procédure Main dans Form_load de la feuille qui doit afficher le treeview.
    1-2- va referencer la chaine dans le panneau de configuration
    si tu optes pour cette méthode, il y aura des choses à enlever sur ton code ci-dessus (je pourrais d'y aider).

    2- Regardes dans les tutoriels (ou un developpeur te donnera le code dans ce forum, ils sont très compétents!!! ) comment écrire une requete sql dans le code vb pour extraire les données d'une base access avec ADO (sans vouloir neccessairement les mettre dans un treeview). A partir de là, tu feras les adaptations avec le code que tu verras pour charger le treeview.

    s'il y a des questions suplémentaires, sans problemes.
    Bon courage

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut
    Citation Envoyé par blaiso
    salut,

    ton code ne peut pas marcher à l'état actuel pour 2 raisons:
    1- tu utilises un nom de connection que tu n'as déclaré nulle part (geststage)
    2- la connection avec la base de données s'est faite avec ODBC et non avec ta méthode.

    tu as deux solutions:
    1- tu optes pour la connection à la base avec odbc et tu crées un module dans ton projet vb et colle le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public geststage As Connection
     
    Public Sub Main()
    Set geststage = New Connection ' tu vois d'où vient le nom geststage
        geststage.ConnectionString = "dsn=yango" 'yango est un nom de votre choix
        geststage.Open
        MDIfrmAccueil.Show 'nom de votre feuille( ici c'est la feuille MDI) 
     
    End Sub
    Note: 1- 1- si tu n'as pas de feuille MDI, mets la procédure Main dans Form_load de la feuille qui doit afficher le treeview.
    1-2- va referencer la chaine dans le panneau de configuration
    si tu optes pour cette méthode, il y aura des choses à enlever sur ton code ci-dessus (je pourrais d'y aider).

    2- Regardes dans les tutoriels (ou un developpeur te donnera le code dans ce forum, ils sont très compétents!!! ) comment écrire une requete sql dans le code vb pour extraire les données d'une base access avec ADO (sans vouloir neccessairement les mettre dans un treeview). A partir de là, tu feras les adaptations avec le code que tu verras pour charger le treeview.

    s'il y a des questions suplémentaires, sans problemes.
    Bon courage

    Je vois dans le sens que tu veux me mener, mais j'ai une question, quel est la meilleure méthode : ADO - ODBC?

    Je dois prendre une des fonctions et aller a fond dedans car sinon, je vais m'embrouiller (tu as remarqué que je suis assez novice (très mauvais prof de vb, lol))

    Merci pour ton aide et pour tes coups de mains futures

  17. #17
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    salut,

    1 - es tu partant pour une connection odbc?
    2- as tu implementer les relations entre tes 5 tables dans ta base de données (après un premier coup, j'ai l'impression que ce sont des relations père-fils)

    les reponses à ces questions sont essentielles pour toiletter ton code et avoir un treeview nickel

    @+

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 35
    Par défaut
    Citation Envoyé par blaiso
    salut,

    1 - es tu partant pour une connection odbc?
    2- as tu implementer les relations entre tes 5 tables dans ta base de données (après un premier coup, j'ai l'impression que ce sont des relations père-fils)

    les reponses à ces questions sont essentielles pour toiletter ton code et avoir un treeview nickel

    @+
    J''ai télécharger du code pour faire un treeview.
    Je vais me reposer ce week-end, et je te mettrai sur le Forum ce que j'ai trouvé.
    1) Oui, je suis partant tat que ca marche
    2) J'ai mis des relations dans ma base de données, je te l'enverrai si tu veux. je t'expliquerai ma logique pour la bd access lundi.

    Bon week-end

  19. #19
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Citation Envoyé par yangoal25
    j'ai télécharger du code pour faire un treeview.
    c'est déjà bon de savoir le principe de fonctionnement d'un treeview simple.
    Citation Envoyé par yangoal25
    Je vais me reposer ce week-end, et je te mettrai sur le Forum ce que j'ai trouvé.
    Repose toi bien

    Citation Envoyé par yangoal25
    1) Oui, je suis partant tat que ca marche.
    Ok
    Citation Envoyé par yangoal25
    2) J'ai mis des relations dans ma base de données, je te l'enverrai si tu veux. je t'expliquerai ma logique pour la bd access lundi.
    Parfait.

    Bon week-end

  20. #20
    Membre actif Avatar de blaiso
    Profil pro
    Banquier
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Banquier

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Par défaut
    Salut yangoal25 ,
    je crains de ne pouvoir avoir le temps lundi (bousculer au boulot)
    je profite du samedi pour t'apporter quelques reponses.

    1- (sous le controle de jacma et les spécialistes des connections avec les bd )
    pas de différence entre ADO et ODBC. Tous sont des ADO. ce que j'appelle ODBC est tout simplement un ADO avec le DSN (Data Source Name).
    Pour ne pas t'embrouiller davantage, nous restons dans ta manière de te connection, ie ADO sans DSN. En clair, tu n'auras pas d'autres manipulations à faire, à part remplacer (ou mettre ce code là de coté par prudence) le code que tu as posté par celui que je te proposerai.

    je suis rassuré que les tables aient des relations.
    je suis parti du principe que la hierarchie est la suivante:
    la 1ere table est le père de la suivante et ainsi de suite . Chaque fils a la clé du père
    CATEGORIE , SOUS-CATEGORIE, SOUS-CATEGORIE2, SOUS-CATEGORIE3, FOURNITURE
    Remplace le code suivant par celui que tu as posté.Il est commenté.
    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
     
    'code modifié et commenté
    Dim adoConnection As Connection
     
    Set adoConnection = New ADODB.Connection
    'Set adoRecordSet = New ADODB.Recordset 'Mis en commentaire, car n'étant pas necessaire dans le code
    ConnectionString = "Provider = Microsoft.Jet.OLEDB.3.51;" & " Data Source = C:\TFE\Stock2.mdb"
    adoConnection.Open ConnectionString
    'adoRecordSet.Open "CATEGORIE", adoConnection  'mis en commentaire
     
     
    Dim SqlD, setClass, setClass2, setClass3, setClass4, setClass5 As Recordset
     
    'geststage a été remplacé par adoConnection
    SqlD = "SELECT Id_Categorie,Int_Categorie FROM CATEGORIE ORDER BY Int_Categorie"
    Set setClass = New Recordset 'la est le problème (le problème sera peut etre resolu, puisqu'on a déclaré la connection)
    setClass.Open SqlD, adoConnection, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    'Remarque général: les jointures entre tables ont été ajoutés dans la clause WHERE
    'Il était aussi possible d'utiliser l'expression INNER JOIN  ON
    'les clés étrangères sont appelées dans la clause SELECT , puis qu'elles sont utilisées par le curseur
     
     
    SqlD = "SELECT CATEGORIE.Id_Categorie, Id_Sous-Categorie1,Int_Sous-Categorie1" & _
            "FROM CATEGORIE, SOUS-CATEGORIE" & _
            "WHERE CATEGORIE.Id_Categorie = SOUS-CATEGORIE.Id_Categorie" & _
            "ORDER BY Int_Sous-Categorie1" 'CATEGORIE.Id_Categorie a été ajouté dans la clause select
    Set setClass2 = New Recordset
    setClass2.Open SqlD, adoConnection, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT SOUS-CATEGORIE.Id_Sous-Categorie1, Id_Sous-Categorie2,Int_Sous-Categorie2" & _
            "FROM SOUS-CATEGORIE, SOUS-CATEGORIE2" & _
            "WHERE SOUS-CATEGORIE.Id_Sous-Categorie1 = SOUS-CATEGORIE2.Id_Sous-Categorie1" & _
            "ORDER BY Int_Sous-Categorie2"
    Set setClass3 = New Recordset
    setClass3.Open SqlD, adoConnection, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT SOUS-CATEGORIE2.Id_Sous-Categorie2, Id_Sous-Categorie3,Int_Sous-Categorie3" & _
            "FROM SOUS-CATEGORIE2, SOUS-CATEGORIE3" & _
            "WHERE SOUS-CATEGORIE2.Id_Sous-Categorie2 = SOUS-CATEGORIE3.Id_Sous-Categorie2" & _
            "ORDER BY Int_Sous-Categorie3"
    Set setClass4 = New Recordset
    setClass4.Open SqlD, adoConnection, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    SqlD = "SELECT SOUS-CATEGORIE3.Id_Sous-Categorie3, Id_Fourniture,Denomination" & _
            "FROM FOURNITURE, SOUS-CATEGORIE3" & _
            "WHERE SOUS-CATEGORIE3.Id_Sous-Categorie3 = FOURNITURE.Id_Sous-Categorie3" & _
            "ORDER BY Denomination"
    Set setClass5 = New Recordset
    setClass5.Open SqlD, adoConnection, adOpenForwardOnly, adLockReadOnly, adCmdText
     
    TreeView1.LineStyle = tvwRootLines
    ' le 1 mis après catégorie a été enlevé (ligne de code ci-dessous). Il represente l'indice de l'image qui apparaitrait avant les noeuds.
    'Il sert quand tu veux representer ton treeview comme dans l'explorateur Windows
    TreeView1.Nodes.Add , , "c", "Catégories" ' Véritable père avec un seul noeud et sa clé est "c"
    Dim idC, idC2, idC3, idC4 As String, nodX As node
    TreeView1.Nodes.Clear   'effacer tous les noeuds (tvwDB est remplacé par "TreeView1"
     
    While Not setClass.EOF
       idC = setClass!id_Categorie
       Set nodX = TreeView1.Nodes.Add("c", tvwChild, idC, setClass!Int_categorie)
       setClass2.Filter = "Id_Categorie='" & setClass!id_Categorie & "'"
     
       While Not setClass2.EOF
          idC2 = setClass2!id_Sous - Categorie1
          Set nodX = TreeView1.Nodes.Add(idC, tvwChild, idC2, setClass2!Int_Sous - Categorie1)
          setClass3.Filter = "id_Sous-Categorie1='" & setClass2!id_Sous - Categorie1 & "'"
     
          While Not setClass3.EOF
             idC3 = setClass3!id_Sous - Categorie2
             Set nodX = TreeView1.Nodes.Add(idC2, tvwChild, idC3, setClass3!Int_Sous - Categorie2)
             setClass4.Filter = "id_Sous-Categorie2='" & setClass3!id_Sous - Categorie2 & "'"
     
             While Not setClass4.EOF
                idC4 = setClass4!id_Sous - Categorie3
                Set nodX = TreeView1.Nodes.Add(idC3, tvwChild, idC4, setClass4!Int_Sous - Categorie3)
                setClass5.Filter = "id_Sous-Categorie3='" & setClass4!id_Sous - Categorie3 & "'"
     
                While Not setClass5.EOF
                Set nodX = TreeView1.Nodes.Add(idC4, tvwChild, , setClass5!Denomination)
                setClass5.MoveNext
                Wend
     
                setClass4.MoveNext
             Wend
     
             setClass3.MoveNext
          Wend
     
          setClass2.MoveNext
       Wend
     
       setClass5.Filter = 0 'Remplacement de setuser par setClass5
       setClass.MoveNext
    Wend
     
    setClass5.Close
    Set setClass5 = Nothing 'correction de setClass5 , qui était mal orthographié
    setClass4.Close
    Set setClass4 = Nothing 'correction de setClass4 , qui était mal orthographié
    setClass3.Close
    Set setClass3 = Nothing 'correction de setClass3 , qui était mal orthographié
    setClass2.Close
    Set setClass2 = Nothing
    setClass.Close
    Set setClass = Nothing
     
    ' Assure que tous les noeuds soient visibles.
    nodX.EnsureVisible
     
    'adoRecordSet.Close 'Mis en commentaire
    adoConnection.Close
     
    Set adoConnection = Nothing
    'Set adoRecordSet = Nothing 'Mis en commentaire
    End Sub
    J'espère que tu trouveras ton compte.
    t'arraches pas les cheveux s'il y a quelques bugs
    Bon debut de semaine.

Discussions similaires

  1. [MySQL] Affichage résultat requête dans un tableau
    Par hannibal974 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/05/2013, 11h36
  2. [MySQL] Résultat requête dans un tableau en une seule instruction
    Par senacle dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/02/2010, 12h56
  3. Réponses: 12
    Dernier message: 09/01/2007, 19h04
  4. [SQL] Affichage résultat requête dans un tableau, bouton affichage page
    Par megapacman dans le forum PHP & Base de données
    Réponses: 35
    Dernier message: 18/05/2006, 16h42

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