//我写了一个函数来完成你想要的功能 //如调用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;
treeview组件有add和addchild方法可以加节点,具体怎么用自己看delphi帮助, 查Ttreeview。提取数据表的字段可以用fieldbyname('字段名').asstring. 查询的sql语句是 select 表名,字段名 from 表一,表二 where 表一.id=表二.id
//如调用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;
查Ttreeview。提取数据表的字段可以用fieldbyname('字段名').asstring.
查询的sql语句是
select 表名,字段名 from 表一,表二 where 表一.id=表二.id