devexpress masterview控件可以很轻松的完成
www.51delphi.com 有下

解决方案 »

  1.   

    //我写了一个函数来完成你想要的功能
    //如调用GetFieldTree(Treeview1);可在TreeView1中得到你想要的树
    //如果你不是用ADO,可以将其中的TADOQuery换为TQuery,并将
    //qryTable.Connection := DataModule.ADOConn改为设置TQuery的
    //DataBaseNameprocedure GetFieldTree(ATreeView : TTreeView);
    var
      qryTable : TADOQuery;
      qryField : TADOQuery;
      trnTable : TTreeNode;
    begin
      ATreeView.Items.Clear;
      qryTable := TADOQuery.Create(nil);
      qryField := TADOQuery.Create(nil);
      qryTable.Connection := DataModule.ADOConn;
      qryField.Connection := DataModule.ADOConn;
      try
        with qryTable do
        begin
          SQL.Text := 'select 表名, ID from 表一';
          Open;
          while not Eof do
          begin
            trnTable := ATreeView.Items.AddChild(nil, FieldByName('表名').AsString);
            qryField.SQL.Text := 'select 字段名 from 表二 '+
                                 'where ID= '+IntToStr(FieldByName('ID').AsInteger)+' ';
            qryField.Open;
            while not qryField.Eof do
            begin
              ATreeView.Items.AddChild(trnTable, qryField.FieldByName('字段名').AsString);
              qryField.Next;
            end;
            qryField.Close;
            Next;
          end;
          Close;
        end;
      finally
        qryField.Free;
        qryTable.Free;
        if ATreeView.Items.Count>0 then
          ATreeView.Selected := ATreeView.Items.GetFirstNode;
      end;
      

  2.   

    treeview组件有add和addchild方法可以加节点,具体怎么用自己看delphi帮助,
    查Ttreeview。提取数据表的字段可以用fieldbyname('字段名').asstring.
    查询的sql语句是
    select 表名,字段名 from 表一,表二 where 表一.id=表二.id