有表(tabel)如下:
----------------------------
id   |  up_id  |  corp_name|
----------------------------
1    |   0     | 一級目錄1 |
2    |   0     | 一級目錄2 |
3    |   1     | 二級目錄1 |
4    |   3     | 三級目錄1 |
5    |   0     | 一級目錄3 |
6    |   5     | 二級目錄2 |
7    |   4     | 四級目錄2 |
8    |   3     | 三級目錄2 |
........如何一次性轉成如下目錄樹
|-一級目錄1--二級目錄1--三級目錄1--四級目錄
|                     |-三級目錄2             
|-一級目錄2
|
|-一級目錄3--二級目錄2
   ..........
就是能不能用一個遞歸來完成數據庫到樹的轉換
要求轉為TREEVIEW

解决方案 »

  1.   

    我已經解決了。。,大富翁上問來的,給大家參考一下
    代碼如下
    ===========
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, Grids, DBGrids, ADODB, ComCtrls;type
      pmyid = ^Tpmyid;
      Tpmyid = record
        nodeid: string;
        nodename: string;
      end;
      TFrmMain = class(TForm)
        TreeView1: TTreeView;
        AdoCon: TADOConnection;
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
        procedure ReadNode(ownNode: TTreeNode; NodeId: string);
        procedure LoadData;
      public
        { Public declarations }
      end;var
      FrmMain: TFrmMain;implementation{$R *.dfm}
    //ReadChileTreeprocedure TfrmMain.ReadNode(ownNode: TTreeNode; NodeId: string);
    //OwnNode:Pater node  NodeId:self nodeid;
    var
      curNode: TtreeNode;
      curID, curName: string;
      adoquery: TAdoQuery;
      myid: pmyid;
    begin
      adoquery := Tadoquery.create(parent);
      adoquery.Connection := AdoCon;
      adoquery.sql.text := 'select * from tree1 where up_id=''' + NodeID + '''';
      with adoquery do
      begin
        open;
        first;
        while not eof do
        begin
          curID := FieldByName('id').AsString;
          curName := fieldByName('Crop_name').AsString;
          new(myid);
          myid^.nodeid := curID;
          myid^.nodename := curName;
          curNode := treeview1.Items.AddChildObject(ownNode, curName, myid);
          ReadNode(curNode, curid);
          next;
        end;
        close;
        free;
      end;
    end;
    procedure TfrmMain.LoadData;
    var
      CurNode:TTreeNode;
      MyID:pMyID;
    begin
      new(MyID);
      MyID^.nodeid:='0'; //'0' is rootnode nodeid
      CurNode:=Treeview1.Items.AddChildObject(nil,'¤½¥q',MyID);  
      ReadNode(CurNode,'0');
    end;
    procedure TFrmMain.FormShow(Sender: TObject);
    begin
    loaddata;
    end;end.===================