数据库表:ID  NAME     P_ID
C   学历
C1  硕士
C2  大学本科    C
C21  本科毕业   C2
C211   本科.....1  c21
c213   本科.....3  c21 
C22  本科Y业     C2
C3  大学专科    C  
C5  中专      C如何创建出来,P_ID是它的父结点。
有什么好办法吗,请详细些,谢谢

解决方案 »

  1.   

    {
    数据库结构:
    表:TV_TABLE:
    字段:ID, NAME, PID
    }unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, ADODB, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        TreeView1: TTreeView;
        ADOQuery1: TADOQuery;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    procedure CreateTree(var ANode : TTreeNode; var pid : integer);
    var
      id : integer;
      name : string;
      bmk : TBookMark;
    begin
      with form1,ADOQuery1 do
      begin
        Filter := 'PID=' + inttostr(pid);
        while not Eof do
        begin
          name := FieldByName('NAME').AsString;
          Anode := Treeview1.Items.AddChild(Anode, name);
          id := FieldByName('ID').AsInteger;
          bmk := GetBook;
          CreateTree(ANode,id);
          Anode := Anode.Parent;
          Filter := 'PID=' + inttostr(pid);
          if ADOQuery1.BookValid( bmk ) then
          begin
            GotoBook(bmk);
            FreeBook(bmk);
          end;
          next;
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      t : TTreeNode;
      Id : integer;
    begin
      ADOQuery1.SQL.Add('select * from tv_table');
      ADOQuery1.Open;
      ADOQuery1.Filtered:=true;  TreeView1.Items.clear;
      t := nil; id := 0;  createtree(t,id);
    end;end.
      

  2.   

    up 我个人认为你这样的表结构设计树是很麻烦的,简直给自己找麻烦,用dbtree很快,而且功能很强大...