向listbox中添加很慢需要5秒,有好办法吗,谢谢

xilou 2005-06-15 12:29:22
如题
是从视图中读取的数据,谢谢各位了
代码如下
rocedure Tydsk.DBGrid1CellClick(Column: TColumn);
begin
listbox1.Items.Clear;
with Adoquery2 do
begin
close;
sql.Clear;
sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');

open;
end;
while not Adoquery2.Eof do
begin
listbox1.Items.Add(Adoquery2.FieldByName('kfcode').AsString);
Adoquery2.Next;
end;
end;
...全文
160 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengjn 2005-06-15
  • 打赏
  • 举报
回复
用onData写写看。
还有就是BeginUpdate和EndUpdate(TStrings类的)
yuanscar 2005-06-15
  • 打赏
  • 举报
回复
应该不是listbox慢,你测试一下视图的查询速度再说。应该是视图的问题。
xilou 2005-06-15
  • 打赏
  • 举报
回复
CSDN好心人多呀,谢谢大家了
g961681 2005-06-15
  • 打赏
  • 举报
回复
原因是你加第一条记录的时候,要刷新一遍(1条记录)
加第二条记录的时候,又要刷新一遍(这一遍,两条记录都要刷新重新显示的)
第三条(同上)
4
5
6
7
.
.
这样下去,当然很好时间的。而且在最后一条刷新之前所有的刷新都是浪费的!
g961681 2005-06-15
  • 打赏
  • 举报
回复
listbox1.Items.BeginUpdate;
while not Adoquery2.Eof do
begin
listbox1.Items.Add(Adoquery2.FieldByName('kfcode').AsString);
Adoquery2.Next;
end;
listbox1.Items.EndUpdate;
addua 2005-06-15
  • 打赏
  • 举报
回复
查询问题
antsfoot 2005-06-15
  • 打赏
  • 举报
回复
如果你的query控件只是用来顺序取kfcode到listbox的话,你可以考虑修改query的cursortype和locktype这两个属性
何鲁青 2005-06-15
  • 打赏
  • 举报
回复
open执行SQL
当然了,毕竟是从硬盘中读取数据阿
你可以想一下别的办法补救,比方说加一个进度条
让客户知道进度就不会觉得慢了,5秒钟,无所谓的
  • 打赏
  • 举报
回复
BeginUpdate和EndUpdate

查资料吧
xilou 2005-06-15
  • 打赏
  • 举报
回复
具我观察好象是在
sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');

open;
这两个步骤很慢,不知道怎么解决
小呆之家 2005-06-15
  • 打赏
  • 举报
回复
begin
listbox1.Items.Clear;
with Adoquery2 do
begin
close;
sql.Clear;
sql.Add('select kfcode from yd_query where lxname='''+dbgrid1.SelectedField.DisplayText+'''');

open;
first;
while not Eof do
begin
listbox1.Items.Add(FieldByName('kfcode').AsString);
Next;
end;

end;
end;
hellolongbin 2005-06-15
  • 打赏
  • 举报
回复
在while not Adoquery2.Eof do之前加
Adoquery2.First

5,386

社区成员

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

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