现在有一种传销人员表,表结构入下:
create table T
( id  char(4),
  name char(10),
  fatherId char(4))
三个字段分别表示:编号、姓名、介绍人编号现在根据比如有下面几条记录:
        id     name    fatherid
        0001   张一    0000
        0002   李一    0000
        0003   张二    0001
        0004   李二    0002
        0005   张三    0003
        0006   李三    0004
现在用树形结构表示他们关系应该是:张一
  张二
     张三 李一
   李二 
      李三
                   我想通过程序实现这样的功能,好像要用到很复杂的递归算法。
在oralce里,好像可以通过sql语句实现,但是其它数据库的sql功能没有那么强大,
最好还是通过delphi程序解决, 就是如何把他们的父子关系用treeview表示出来。  希望大家能够提供算法或者代码.

解决方案 »

  1.   

    就是一个while 循环读就可以了塞。
      

  2.   

    type
        T=record
            id:string;
            name:string;
            fatherid:string;
        end;const 
             aryT:Array[0..4] of T=((id:'0001';name:'al1';fatherid:'0000'),
                                    (id:'0002';name:'al2';fatherid:'0000'),
                                    (id:'0003';name:'al3';fatherid:'0001'),
                                    (id:'0004';name:'al4';fatherid:'0002'),
                                    (id:'0005';name:'al5';fatherid:'0003'));procedure TForm1.CreateTreeNode(ParentNode:TTreeNode;t1:T);
    var
        i:integer;
        TreeNode:TTreeNode;
    begin
        for i:=0 to 4 do
            if aryT[i].fatherid=t1.id then
            begin
                TreeNode:=TreeView1.Items.AddChild(ParentNode,aryT[i].name);
                CreateTreeNode(TreeNode,aryT[i]);
            end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
        i:integer;
        TreeNode:TTreeNode;
    begin
        for i:=0 to 4 do
            if aryT[i].fatherid='0000' then
            begin
                TreeNode:=TreeView1.Items.AddChild(nil,aryT[i].name);
                CreateTreeNode(TreeNode,aryT[i]);
            end;
    end;
      

  3.   

    刚刚的代码有点罗嗦,再优化一下:
    type
        T=record
            id:string;
            name:string;
            fatherid:string;
        end;const 
             aryT:Array[0..4] of T=((id:'0001';name:'al1';fatherid:'0000'),
                                    (id:'0002';name:'al2';fatherid:'0000'),
                                    (id:'0003';name:'al3';fatherid:'0001'),
                                    (id:'0004';name:'al4';fatherid:'0002'),
                                    (id:'0005';name:'al5';fatherid:'0003'));procedure TForm1.CreateTreeNode(ParentNode:TTreeNode;parentid:string);
    var
        i:integer;
        TreeNode:TTreeNode;
    begin
        for i:=0 to 4 do
            if aryT[i].fatherid=parentid then
            begin
                TreeNode:=TreeView1.Items.AddChild(ParentNode,aryT[i].name);
                CreateTreeNode(TreeNode,aryT[i].id);
            end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
        CreateTreeNode(nil,'0000');
    end;
      

  4.   

    不应该用常量来定义,在表中依次循环,用TreeNode依次添加,其中根节点需要给定