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

Algorithmes et structures de données Discussion :

TreeView - Remplissage recurssif d'une table


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut TreeView - Remplissage recurssif d'une table
    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...

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Pourquoi ne pas indexer la table sur le champ 'parent' et travailler en itératif?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    Cette table fait partie d'une base de donnée. Il n'est pas possible de la changer ...

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    la profondeur maximale de l'arbre est elle connue et raisonnable ?
    si oui un select imbriqué permet d'obtenir la solution en lecture directe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    non la profondeur de l'arbre n'est pas connue d'avance mais elle ne devrait pas exceder 5 niveaux.

    Peux-tu me donner plus de précsions a propos du 'select' ?

    Merci

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    Voila la solution, c'est possible de l'améliorer mais elle fonctionne !

    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
     
    procedure TfrmMain.makeTreeNodes(id : Integer; node : TTreeNode);
    var
      tvwNode         : TTreeNode;
      tempID          : Integer;
      tempName        : String;
      myQuery         : TADOQuery;
     
    Begin
        myQuery := TADOQuery.Create(nil);
        myQuery.ConnectionString := DataModule1.ADOConnection.ConnectionString;
        myQuery.SQL.Clear;
        myQuery.SQL.Add('SELECT * FROM TREE_VIEW_TABLE WHERE (HIDDEN = 0) AND (PARENT = ' + IntToStr(id) + ')');
        myQuery.Open;
        With myQuery do
              Begin
                  while NOT EOF do
                  Begin
                      tempID    := FieldByName('ID').AsInteger;
                      tempName  := FieldByName('BRANCH_NAME').AsString;
                      tvwNode   := tview.Items.AddChild(node , tempName);
                      makeTreeNodes(tempID,tvwNode);
                      next;
                  end;
              end;
        myQuery.Close;
        myQuery.Free;
    end;

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

Discussions similaires

  1. [AC-2010] Remplissage automatique d'une Table
    Par guyhoquet dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/08/2014, 10h15
  2. Remplir un TreeView à l'aide d'une table.
    Par Dragonaute dans le forum C#
    Réponses: 0
    Dernier message: 03/06/2010, 23h19
  3. Remplissage automatique d'une table
    Par AzalTeeb dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2008, 21h55
  4. comment creer un treeview a partir d une table
    Par steeves5 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 18h03
  5. access remplissage auto d'une table
    Par bjornd dans le forum Access
    Réponses: 2
    Dernier message: 09/11/2005, 08h05

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