急求从数据库读出treeview多级目录的代码找到一段要递归的读数据库,调试的时候结果出现var id:pid
这行错误,不知道这个定义需要引用什么库,有没有无需多次读数据库的递归代码

解决方案 »

  1.   

    pid 应为一个自定的类型.盒子上有DEMO
      

  2.   


    Procedure TFMain.FormCreate(Sender: TObject); 
     Procedure createsubtree(parentid: String; node: ttreenode; i: integer);
      Var
        laq: tadoquery;
        childnode: ttreenode;
      Begin
        laq := tadoquery.Create(self);
        laq.Connection := dm.ADOC;
        laq.SQL.Text := 'select sid,chapter,simpchinese,CiteSameness from dictionary where chapter=' + '''' + parentid + '''';
        laq.SQL.Text := laq.SQL.Text + ' and showuser like (''%' + pubfrm.fUserName + '%'')';
        laq.SQL.Text := laq.SQL.Text + ' and left(sid,1)=''0' + ''' order by keyid ';
        laq.Open;
        While Not laq.Eof Do
          Begin
            childnode := tv.Items.AddChild(node, laq.Fields[2].asstring);
            childnode.ImageIndex := i;
            createsubtree(laq.Fields[0].asstring, childnode, i + 1);
            laq.Next;
          End;
      End;Begin
      createsubtree('0', Nil, 1);
    End;
      

  3.   

    在数据库中建一张表,包含:NodeName,NodeId,ParentId 3个字段,具体什么含义,一看就知了。过程如下:procedure TFRM_channel.formtreenode(parentid:string;TreeView1: TTreeView;parentnode:TTreeNode;ADOQuery1:TADOQuery);
    var
        i:integer;
        treenode:TTreeNode;
    begin
        i:=0;
        ADOQuery1.First;
        while not ADOQuery1.Eof do
          begin
             if ADOQuery1.FieldByName('ParentId').AsString=parentid then
               begin
                  treenode:=TreeView1.Items.AddChild(parentnode,ADOQuery1.fieldbyname('NodeName').AsString);
                  formtreenode(ADOQuery1.fieldbyname('NodeId').AsString ,TreeView1,treenode,ADOQuery1);
               end;
              inc(i);
              ADOQuery1.First;
              ADOQuery1.MoveBy(i);
          end;
    end;在调用如下,如在窗体的create事件中:procedure TFRM_channel.FormCreate(Sender: TObject);
    var
      TreeNode1:TTreeNode;
      i:integer;
      nodename:string;
      nodeid:string;
      parentid:string;
      cmdstr:string;begin
    //初始化树形节点
       ADOQuery1.ConnectionString:=mypublic.datastr;   cmdstr:='select * from ChanTreeNode order by ParentId ,NodeId asc';
       ADOQuery1.Close;
       ADOQuery1.SQL.Clear;
       ADOQuery1.SQL.Add(cmdstr);
       ADOQuery1.Open;       TreeNode1:=nil;
         formtreenode('000',TreeView1,TreeNode1,ADOQuery1);
    end;找到了,谢谢大家
      

  4.   

    给你一个我用的
    根据数据库结构生成TreeView