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 |
Partager