我要实现从数据库中取出数据,然后显示成树状结构的形式
我的算法如下:
procedure TFrmmain.treefind(const parentname:string;var node:TTreenode; parentquery:TADOQuery);
var //递归便利
fnode:TTreenode;
cadoquery:Tadoquery;
begin
cadoquery:=Tadoquery.Create(nil);
try
cadoquery.Connection:=DMBook.ADOCBOOK;
DMBook.ADOCBOOK.BeginTrans;
with parentquery do
begin //with
Close;
SQL.Clear;
SQL.Add('select distinct * from Listtb where ParentName=:ParentName order by ListName desc');
Parameters.ParamByName('ParentName').Value:=ParentName;
Open;
Disablecontrols;
DMBook.ADOCBOOK.CommitTrans;
if recordcount > 0 then
while not eof do
begin
fnode:=treeview1.Items.AddChildFirst(node,fieldbyname('ListName').AsString);//增加叶子
// fnode.SelectedIndex:=fnode.ImageIndex;
treefind(fieldbyname('ListName').AsString,fnode,cadoquery);
next;
end;
enablecontrols;
end; //with
finally
cadoquery.Free;
end;
end;
请问如何提高效率,我数据库中的数据有20000多条数据,我想用用很短的时间把它显示出来,请教那位高手会这个问题,请多多指教啊!
我的算法如下:
procedure TFrmmain.treefind(const parentname:string;var node:TTreenode; parentquery:TADOQuery);
var //递归便利
fnode:TTreenode;
cadoquery:Tadoquery;
begin
cadoquery:=Tadoquery.Create(nil);
try
cadoquery.Connection:=DMBook.ADOCBOOK;
DMBook.ADOCBOOK.BeginTrans;
with parentquery do
begin //with
Close;
SQL.Clear;
SQL.Add('select distinct * from Listtb where ParentName=:ParentName order by ListName desc');
Parameters.ParamByName('ParentName').Value:=ParentName;
Open;
Disablecontrols;
DMBook.ADOCBOOK.CommitTrans;
if recordcount > 0 then
while not eof do
begin
fnode:=treeview1.Items.AddChildFirst(node,fieldbyname('ListName').AsString);//增加叶子
// fnode.SelectedIndex:=fnode.ImageIndex;
treefind(fieldbyname('ListName').AsString,fnode,cadoquery);
next;
end;
enablecontrols;
end; //with
finally
cadoquery.Free;
end;
end;
请问如何提高效率,我数据库中的数据有20000多条数据,我想用用很短的时间把它显示出来,请教那位高手会这个问题,请多多指教啊!
介绍下小白鸽的方法,不用递归,开始只添加1级的数据,当点击这个项的时候,添加下一级的数据,简单来说,只有点击某个项才去获取这个项的下一级数据,不需要递归算法。
另外还有就是XP资源管理器的方法值得借鉴,要看你每一级所用到的数据的数量。
资源管理器的方法是,使用递归,每次添加树的3级项目(大概3级,没有仔细分析),等到点击没有获得数据的项目时,再为这个项目添加3级子项目,自己可以看下资源管理器,当你点击某个树形文件夹,有的时候花的时间特别长,就是这个装载数据的时间。这种方法结合了递归和需要时取数据2种方法,效率比较好,合理分配程序开始装载的时间和运行期间花费的时间。不过这样也有坏处,就是算法复杂些。
具体一次添加几级项目,要根据每一级项目的数量决定。