通过一数据库.
生成一颗树..   树级树未知..故不能用TTreeNode来生成..
 
   哪位高手有办法..

解决方案 »

  1.   

    哪个跟你说的未知就不能用TREENODE来做了啊??
    按条件查询再用递归的办法添加树节点不就可以了....
      

  2.   

    那么我怎么知道我要定义多少个TTreeNode呢..
       我不清楚数据库里到底有多少个下级目录..Sql:String;
    Mod_Id:String;
    Node,Node1,Node2,Note3:TTreeNode;
    begin
    Node:=Tree.Items.Add(Tree.TopItem,'模块管理');
    Sql:='Select * from Base_Module where PARENT_ID="0000"';
    SendSqlQuery(TShare_MainCon,ADOQuery1,Sql);
     while Not ADOQuery1.eof Do
     begin
     Node1:=Tree.Items.AddChild(Node,ADOQuery1.fieldbyname('NAME').AsString);
     Mod_Id:=ADOQuery1.FieldByName('MODULE_ID').AsString;
     Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
     SendSqlQuery(TShare_MainCon,ADOQuery2,Sql);
      While Not ADOQuery2.Eof Do
       Begin
       Node2:=Tree.Items.AddChild(Node,ADOQuery2.fieldbyname('NAME').AsString);
         ..........
       ADOQuery2.Next;
       End;
      ADOQuery1.Next;
     end;
      

  3.   

    晕哪,你数据库是怎么设计的啊??
    每条记录都要有一个ID,一个父ID,通过父ID来查找这条记录是属于哪个的子记录,比如
    id   parentid   name
    1       0        a
    2       1        b
    3       1        c
    4       2        d
    5       2        e
    6       3        f
    那么在树中就这样表示
    a
    |__b
    |  |_d
    |  |_e
    |
    |__c
       |_f
    通过递归来查询记录...不然你怎么知道查到哪里时没有符合条件的记录了,
      

  4.   

    我觉得设计成id   name   parentid这样的话,如果parentid为空则说明这是一个顶级节点,parentid不为空则根据parentid进行分级,使用递归完成一棵树。
      

  5.   

    感謝各位高手.
     可惜用這個方法還是沒有解決.
      數據庫設計沒錯..一個ID,一個NAME,一個PARENT_ID; 現在的問題就是出現在這:
              他可能會出這樣的情況
    a
    |__b
    |  |_d
    |__|_|_e
    |__|_|_|_f
    |__|_|_|_|_g
               .
               .
               .
     我不知道他有多少級..那麼我每查詢一次都會要有個判斷..如:
    Sql:String;
    Mod_Id:String;
    Node,Node1,Node2,Note3:TTreeNode;
    begin
    Node:=Tree.Items.Add(Tree.TopItem,'模块管理');
    Sql:='Select * from Base_Module where PARENT_ID="0000"';
    SendSqlQuery(TShare_MainCon,ADOQuery1,Sql);
     while Not ADOQuery1.eof Do
     begin
     Node1:=Tree.Items.AddChild(Node,ADOQuery1.fieldbyname('NAME').AsString);
     Mod_Id:=ADOQuery1.FieldByName('MODULE_ID').AsString;
     Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
     if SendSqlQuery(TShare_MainCon,ADOQuery2,Sql) then
     begin
      While Not ADOQuery2.Eof Do
       Begin
       Node2:=Tree.Items.AddChild(Node,ADOQuery2.fieldbyname('NAME').AsString); 
        Mod_Id:=ADOQuery2.FieldByName('MODULE_ID').AsString;
        Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
        if SendSqlQuery(TShare_MainCon,ADOQuery3,Sql) then
          begin
               .........
    如此下去..那我應該定義多少個TTREENODE..多少個TADOQuery控件吖.
      

  6.   

    给你个例子看下吧:
    procedure TCompanyOpenB.AddParentNode;                         //添加父节点
      var aParentNode:TTreeNode;
          aParentquery:TSQLquery;
    begin
      aParentquery:=TSQLquery.Create(nil);
      aParentquery.SQLConnection:=DMdp_mid.SQLConnection1;
      with aParentquery do
      begin
        SQL.Clear;
        SQL.Text:='select * from dp_companytype where parentid=0';
        Open;
        while not Eof do
        begin
          aParentNode:=treeview1.Items.AddChild(node,aParentquery.fieldbyname('name').AsString);
          AddChildNode(aParentNode,aParentquery);
          Next;
        end;
      end;
      aParentquery.Free;
    end;
    //添加子节点
    procedure TCompanyOpenB.AddChildNode(ChildNode: TTreeNode;        //添加二级子节点
      Childquery: TSQLquery);
      var aChildNode:TTreeNode;
          aChildquery:TSQLquery;
    begin
       aChildquery:=TSQLquery.Create(nil);
       aChildquery.SQLConnection:=DMdp_mid.SQLConnection1;
       with aChildquery do
       begin
         close;
         SQL.Clear;
         SQL.Text:='select * from DP_CompanyType where ParentID='''+Childquery.fieldbyname('CompanyTypeID').AsString+'''';
         open;
         while not eof do
         begin
           aChildNode:=treeview1.Items.AddChild(ChildNode,aChildquery.fieldbyname('name').asstring);
           AddChildNode(aChildNode,aChildquery);
           next;
         end;
       end;
       aChildquery.Free;
    end;
      

  7.   

    不用递归也可以的...http://community.csdn.net/Expert/TopicView1.asp?id=5635166