==============================
有1个TreeView,和这样一个表表               名称    所属
                节点1   根结点1
节点2   节点1
节点3   节点2
节点4   节点1 
节点5   根节点2根结点1和2是TreeView固有的2个节点,我想让程序运行时从表中读出数据,先读“所属”为“根结点”的所有数据,添加到TreeView的根节点下,再读“所属”为“刚才添加的节点”的所有数据,生成TreeView的Item,添加到“刚才添加的节点”下。
我觉得好像就是用递归,不过我是菜菜,不会写,求源码!
只知道TreeView某一节点的名称,想给他添加SubItem,怎么做呢?我用的是ADO+Access,请高手们帮忙推荐点例程呀,贴子什么的,多谢多谢!见源码就结贴,快抢啊!  新年快乐!
===================================

解决方案 »

  1.   

    先找到那个节点ANodeTreeView1.AddChild(ANode,'字节点');
      

  2.   

    procedure TFrm_KernelPurView.Button1Click(Sender: TObject);
    var
      node : TTreeNode;
      i : integer;
      s : string;
    begin
      inherited;
      with query1 do
      begin
        close;
        sql.Clear;
        sql.Add('SELECT GRPID,GRPNAME FROM SYSGROUP');
        open;
      end;
      s := query1.fieldbyname('grpname').AsString;
      treeview1.Items.Clear;
      for i := 0 to query1.RecordCount - 1 do
        begin
          Node := treeview1.Items.Add(nil,s);
          with query2 do
          begin
            close;
            sql.Clear;
            sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
            open;
          end;
          for i := 0 to query2.RecordCount -1 do
          begin
            treeview1.Items.AddChild(node,query2.fieldbyname('name').AsString);
            next;
          end;
          next;
        end;end;
      

  3.   

    procedure TFrm_KernelPurView.Button1Click(Sender: TObject);
    var
      node : TTreeNode;
      i : integer;
      s : string;
    begin
      with query1 do
      begin
        close;
        sql.Clear;
        sql.Add('SELECT GRPID,GRPNAME FROM SYSGROUP');
        open;  //查询第一层节点
      end;
      s := query1.fieldbyname('grpname').AsString; //第一层节点显示的文本
      treeview1.Items.Clear;  //清空全部节点
      for i := 0 to query1.RecordCount - 1 do
        begin
          Node := treeview1.Items.Add(nil,s);  //添加第一层节点
          with query2 do
          begin
            close;
            sql.Clear;
            sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
            open;  //根据地一层节点查询此节点下的第二层节点
          end;
          for i := 0 to query2.RecordCount -1 do
          begin
            treeview1.Items.AddChild(node,query2.fieldbyname('name').AsString);
            //添加第二层节点
            next;
          end;
          next;
        end;end;
      

  4.   

    sql.Add('SELECT A.GRPNAME,B.NAME FROM SYSGROUP A,SYSUSER B WHERE A.GRPID = B.GRPID');
    请问这一句怎么解释
      

  5.   

    to zzllabc(龙) 
       你的代码好像缺了两句
    QUERY1.CLOSE;
    QUERY2.CLOSE;这两句可在函数结束时填也可在窗体结束时填,不然会有麻烦的。
    TO  wlmy2004(wl) 
    这句话的意思是在query控件中添加sql语句,这个语句是说 从SYSGROUP表和SYSUSER  中查询两个
    字段分别是sysgroup的grpname字段和sysuser的name字段,条件是sysgroup的grpid等于sysuser的grpid字段.