var UnitNode,DepNode,ManNode: TTreeNode;   with TreeView do
   begin
     Items.Clear;
     Query1.Close;
     Query1.Sql.Text := 'SELECT * FROM 单位';
     Query1.Open;
     while not Query1.Eof do
     begin
       UnitNode := Items.AddChild(nil,Query1.FieldByName('单位名称').AsString);
       Query2.Close;
       Query2.Sql.Text := 'SELECT * FROM 部门 WHERE 部门号='''+Query1.FieldByName('部门号')+'''';
       Query2.Open;
       while not Query2.Eof do
       begin
         DepNode := Items.AddChild(UnitNode,Query2.FieldByName('部门名称').AsString);
         Query3.Close;
         Query3.Sql.Text := 'SELECT * FROM 人员表 WHERE 部门号='''+Query2.FieldByName('部门号').AsString+'''';  
         Query3.Open;
         while not Query3.Eof do
         begin
           ManNode := Items.AddChild(DepNode,Query3.FieldByName('人员名').AsString);
           Query3.Next;
         end;
         Query2.Next;   
       end;
       Query1.Next;  
     end;
   end;

解决方案 »

  1.   

    上面的方法应该没问题的,
     但是如果记录多的话就可能很慢的
     你可以先调第一层的,等鼠标点到某个Node时,再展开下一层
     这样相对来说要好一点,速度也行,
     关键就是表的设计要体现出层的概念来。
     如果用树型表+指针的话确实很酷
      

  2.   

    shi de 
    ziji jia you a
      

  3.   

    我想做一个象dbnavigatortor的几个按钮,实现上一条,下一条,第一条等,
    如单击“下一条”,显示人员表中第二条记录(编号 02 姓名:王红 ),即在树treeview第三层中显示在“王红”上。
    别外票票朋友我怎么给你分呀,在哪儿操作呀?
      

  4.   

    上一条:treeview1.selected.getprev
    下一条:treeview1.selected.getnext
    第一条:treeview1.items.getfirstchild
    最后一条:treeview1.items.getlastchild
      

  5.   

    我想朋友你没有明白我的意思,左边是三层树,第一层显示table1中单位字段,第二层显示table2中部门字段,第三层显示table3人员字段。右边是dbgrid,数据源是table3的源datasource3.做几个按钮,实现“上一条记录”“下一条记录”“第一条记录”“最后一条记录”“编辑”“保存”“增加”“删除”刷新”等功能,并且和treeview同步,如第一条记录(编号 01,机关,生产科,王红)下一条记录(编号 01,开关厂,财务科,王强),当单击“下一条”时,treeview显示在节点“王强”上,单击“上一条”时treeview显示在“王红”节点上.
      

  6.   

    TDxDBTreeView控件用过吗?
    很方便的
    不过你可能需要重新设计库结构
      

  7.   

    //下一个,其他类似
    procedure TForm1.ButtonNextClick(Sender: TObject);
    var ii: Integer;
    begin
      ii := TreeView1.Selected.AbsoluteIndex;;
      if ii = TreeView1.Items.Count-1 then
      begin
        ShowMessage('已经到最后了!');
        Exit;
      end;
      ii := ii + 1;
      TreeView1.Items[ii].Selected := True;
      while (ii<TreeView1.Items.Count) and (TreeView1.Items[ii].Level <> 2) do
      begin
        Inc(ii);
        TreeView1.Items[ii].Selected := True;
      end;
    end;
      

  8.   

    treeview在显示下一条时,无焦点。
    和dbguid不同步。
      

  9.   

    可以利用现成的dbtree组件做,该组件可以下载,加入dephi中既可使用,如果需要,我可以给你。
      

  10.   

    to xiting.
    dbtree我有,但要修改数据库。
    希望大家好好看看我的要求。
    左边是三层树,第一层显示table1中单位字段,第二层显示table2中部门字段,第三层显示table3人员字段。右边是dbgrid,数据源是table3的源datasource3.做几个按钮,实现“上一条记录”“下一条记录”“第一条记录”“最后一条记录”“编辑”“保存”“增加”“删除”刷新”等功能,并且和treeview同步,如第一条记录(编号 01,机关,生产科,王红)下一条记录(编号 01,开关厂,财务科,王强),当单击“下一条”时,treeview显示在节点“王强”上,单击“上一条”时treeview显示在“王红”节点上.
      

  11.   

    用QUERY一层一层的查询添加,当数据太多时是很慢的,不太可取,应有更好的方法。