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

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条)

报告相同问题?

悬赏问题

  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动