通过递归生成树图,速度很慢,有何办法

cpu 2007-08-17 05:46:42
通过递归生成树图,速度很慢,有何办法
数据库为SQL SERVER 2005,数据库共有数据12万条,要从中选中合适的数据组成树图,但速度很慢,请帮忙
...全文
487 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bear_hx 2007-08-18
  • 打赏
  • 举报
回复
支持楼上改成动态加载
lwk_hlj 2007-08-18
  • 打赏
  • 举报
回复
递归生成树只能用在部门之类的小树上


大规模的树,只能用逐层create的,
即用一层,开一层,

去观察一下 资源流览器,想想怎么玩吧!
lwk_hlj 2007-08-18
  • 打赏
  • 举报
回复
12W,用什么都会慢


提速只能是 一层一层的建立


勉励前行 2007-08-18
  • 打赏
  • 举报
回复
12万条
放到 TTreeView 中,那真是慢得要死。
改用其他 Tree控件 , 如 TVirtualTree 等,速度才有可能快些。
hsmserver 2007-08-18
  • 打赏
  • 举报
回复
var
List:TStringList;
Node:TTreeNode;
Index:Integer;
------------------------
cdstree.commandtext:='SELECT * from TABLE ORDER BY 上级ID,ID'
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;

List:= TStringList.Create;
try
List.Sorted:= True;
cdsTree.First;
while not cdsTree.Eof do
begin
//如果是顶接点
if cdsTree.FieldByName( "你的上级ID ").AsInteger= 0 then
begin
Node:=TreeView.Items.AddChild(nil, cdsTree.FieldByName(mName).AsString)
end else
begin
Index:= List.IndexOf(cdsTree.FieldByName( "你的上级ID ").AsString);
Node:= TreeView.Items.AddChildFirst(TTreeNode(List.Objects[index]),
cdsTree.FieldByName( "你的字段名称 ").AsString);
end;
List.AddObject(cdsTree.FieldByName( "ID ").AsString, Node);
cdsTree.Next;
end;
finally
List.Free;
cdsTree.Close;
end;
finally
TreeView.Items.EndUpdate;
end;
ziping 2007-08-18
  • 打赏
  • 举报
回复
就是 赞成动太增加
baseyueliang 2007-08-18
  • 打赏
  • 举报
回复
从2个步骤中本别考虑优化,
1、取数据:上面提到的逐层取数据是个办法,但同样带来另外的问题,造成数据库频繁访问,每一次访问都造成用户等待。这是lz要考虑的。建议在其他县城中查询数据。
2、显示:数据得到后暂存本地内存,需要的时候再声成Node

dll0629 2007-08-17
  • 打赏
  • 举报
回复
先加入第一层,有子类的加一个逗号,当展开某个节点下一层时,去掉逗号,添加这个节点的下一层子类(在onExpanding事件里写)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧