当查询大量数据并加入时,请问如何提高查询速度!(treeview) ( 积分: 100 )

  • 主题发起人 主题发起人 hongshanwdj
  • 开始时间 开始时间
H

hongshanwdj

Unregistered / Unconfirmed
GUEST, unregistred user!
我是初学者。各位大侠帮小弟看看下面的查询,速度太慢啊---当数据量很大时,帮小弟改改,谢谢拉&nbsp;&nbsp;<br>&nbsp;&nbsp;treeview1.Items.Clear;<br>&nbsp;&nbsp;treeview1.Items.Add(nil,'数据浏览');<br>&nbsp;&nbsp;query2.Close;<br>&nbsp;&nbsp;&nbsp;query2.SQL.Clear;<br>&nbsp;&nbsp;&nbsp;query2.SQL.Add('select&nbsp;Distinct&nbsp;nianyue&nbsp;from&nbsp;sysdb');<br>&nbsp;&nbsp;&nbsp;query2.Open;<br>&nbsp;&nbsp;&nbsp;While&nbsp;not&nbsp;query2.eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tlist:=treeview1.Items.AddChild(treeview1.Items[0],query2.fieldbyname('nianyue').asstring);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tlist.selectedindex:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tlist.ImageIndex:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query2.Next;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;query2.Close;<br>&nbsp;&nbsp;&nbsp;query2.SQL.Clear;<br>&nbsp;&nbsp;&nbsp;query2.SQL.Add('select&nbsp;*&nbsp;from&nbsp;sysdb');<br>&nbsp;&nbsp;&nbsp;query2.Open;<br>aaa:&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;query2.Eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;a:=0&nbsp;to&nbsp;treeview1.items[0].count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;query2.FieldByName('nianyue').AsString=treeview1.Items[0].Item[a].Text&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;bianhao&lt;&gt;query2.fieldbyname('bianhao').asstring&nbsp;&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tlist:=treeview1.Items.AddChild(treeview1.Items[0].item[a],query2.fieldbyname('bianhao').AsString&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tlist.SelectedIndex:=2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tlist.ImageIndex:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bianhao:=query2.fieldbyname('bianhao').asstring;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;bianhao=query2.fieldbyname('bianhao').asstring&nbsp;&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bianhao:=query2.fieldbyname('bianhao').asstring;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query2.Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;aaa;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query2.Next;<br>&nbsp;&nbsp;&nbsp;end;
 
可以考虑分页的形式来显示,你搜一下,网上有很多这样的例子!<br>另外,你调用open之后调用DisableControls,完成之后再调用EnableControls
 
速度问题应该不是在SQL执行部分,应该是在将列有增加到LIST中,所以我想楼上的DisableControls这个方法对你应该有用,如没有用,你可以通过SQL监视器看一下这个SQL执行的效率.
 
我想楼主还是应该测试一下,你的程序是在哪一段使用的时间是比较长的,这样才能进行针对性解决!<br>如果你的树不是每次都全部展开的,你可以只初始化第一级,在展开某一结点时,如果没有子项,再从数据库中提取子结点内容,这样会好一点!!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
503
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部