Salut,


Voila mon probleme

J'ai une table SQL dans laquelle j'ai la description d'une arborescence.

en gros :
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
 
ID     |     Name      |        Parent
1            a                     
2            aaa                     
3            sse
4            erd                     1
5            fdf                     3
6            r                       1
7            zzz                     8  
8            bbb                     1
9            ccc                     3
10                                    ...
11
12
...
Le but est de remplir un TreeView avec ces données chaque element (ID) sera un noeud fils avec un element 'parent' ...

pour avoir un truc, suivant la table :
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
 
-a
|
|_erd
|_r
|_bbb
     |   
     |_zzz
 
-aaa
 
-se
|_fdf
 
etc...
Le but est un algo récursif. La question a ete en partie résolue ici :
http://www.developpez.net/forums/sho...d.php?t=267013

Mais la solution n'est pas bonne, car on ne s'ocupe pas des branches filles et des filles de celles-ci.



Voici le code que j'ai écrit (en Delphi)

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
 
procedure TfrmMain.makeTreeNodes(id : Integer; node : TTreeNode);
var
  tvwNode         : TTreeNode;
  listOfNodes     : Array[0..255] of Integer;
  tempID,
  numberOfChilds,
  i               : Integer;
  tempName        : String;
 
Begin
numberOfChilds := 0;
     With DataModule1.qry_ForTreeView do
          Begin
              SQL.Clear;
              SQL.Add('SELECT * FROM TREE_VIEW_TABLE WHERE (PARENT = ' + IntToStr(id) + ')');
              Open;
              while NOT EOF do
              Begin
                  tempID    := FieldByName('ID').AsInteger;
                  tempName  := FieldByName('BRANCH_NAME').AsString;
                  tvwNode   := tview.Items.AddChild(tvwNode , tempName);
                  listOfNodes[numberOfChilds] := tempID;
                  inc(numberOfChilds);
                  next;
              end;
////---> Jusqu'ici ca devrait être bon
/// ---> Après ca foire !!!
              makeTreeNodes(listOfNodes[i],tvwNode.Item[i]);
              Close;
          end;
end;
Après le next; end; , il me faudrait une 2ème boucle qui appelle la récursive pour démeler les branches....

mais je n'arrive pas à l'implémenter...

Note : tview est un treeview créé dans mon MainForm.


Merci pour votre aide...