普通网友 2016-06-24 14:39 采纳率: 50%
浏览 1820
已采纳

delphi7读取数据库用treeview显示,速度太慢,高手帮忙优化

代码:
数据库字段: nodeid,title,parentid,turn
procedure TForm1.ReadTree(Node:TTreeNode;nid:Integer);
var
sql:string;
tNode:TTreeNode;
id:integer;
ado:TADOQuery;
begin
sql:=Format('select * from ttree where parentid=%d order by turn',[nid]);
ado:=TADOQuery.Create(nil);
ado.Connection:=ADOConnection1;
ado.SQL.Clear;
ado.SQL.Add(sql);
ado.Open;
ado.First;

while not ado.Eof do
begin
     id:= ado.Fields[0].AsInteger;
     tnode:=TreeView1.Items.AddChild(Node,ado.Fields[1].AsString ) ;
     ReadTree(tNode,id);
     ado.Next;
end;
ado.Close;
ado.Free;

end;
procedure TForm1.AddRoot;
var
ado:tadoquery;
node:TTreeNode;
begin
ado:=TADOQuery.Create(self);
ado.Connection:=ADOConnection1;
ado.SQL.Clear;
ado.SQL.Add('select * from ttree where parentid=0');
ado.Open;
while not ado.Eof do
begin
node:=TreeView1.Items.AddChild(nil,ado.Fields[1].AsString );
ReadTree(node,ado.Fields[0].AsInteger );
ado.Next;
end;
ado.Close;
ado.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AddRoot;
end;
启动速度很慢,CPU也100%,有办法优化或其他的方法实现吗??

  • 写回答

3条回答 默认 最新

  • threenewbee 2016-06-24 22:33
    关注

    懒惰加载,只加载当前层和下一层(以便让下一层左侧出现加号)。在treeexpend事件中加载再下一层。windows资源管理器就是这么做的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!