为什么会这么慢?

yplin 2003-12-18 10:02:21
用一个 dxDBGrid 通过IBQuery得到查询结果后,使用IBQuery的AfterScroll在相应的Combo中显示数据,但每点击一次 dxDBGrid 中的记录,Combo中的数据就开始闪个不停,好像是把被点击记录之前的所有记录从头开始都显示了一遍,直到被点击的那一条记录为止。越是靠后的记录显示需要的时间越长,等待的时间也越长。

这是为什么呢?
...全文
35 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yplin 2003-12-20
  • 打赏
  • 举报
回复
把IBQuery换成ClientDataSet就没事了,不知道为什么?
yplin 2003-12-19
  • 打赏
  • 举报
回复
去掉也不行,都试过了
请大家继续
yplin 2003-12-19
  • 打赏
  • 举报
回复
TO edgethinking(死鬼)
没有使用过 TDataSource 的OnGetText或OnSetText事件

倒是有可能是dxDBGrid引起的,但该如何解决?
edgethinking 2003-12-19
  • 打赏
  • 举报
回复
当然也有可能是dxDBGrid引起的, 把它换成TDBGrid试一下,看还有没有问题?
edgethinking 2003-12-19
  • 打赏
  • 举报
回复
你肯定是其他的代码有问题,比如说你有没有使用过 TDataSource 的OnGetText或

OnSetText事件?如果有用的话,就会引起这样的问题。
yplin 2003-12-19
  • 打赏
  • 举报
回复
sundayboysII 2003-12-18
  • 打赏
  • 举报
回复
把IBQuery.DisableControls和IBQuery.EnableControls;去掉
yplin 2003-12-18
  • 打赏
  • 举报
回复
用中断看了一下,每点一下DBGrid,每个数据都要过一遍,不解?
yplin 2003-12-18
  • 打赏
  • 举报
回复
AfterScroll里只有给控件赋值的语句,如下:
procedure TFrmMain.IBQueryAfterScroll(DataSet: TDataSet);
begin
WriteData;
end;

procedure TFrmMain.WriteData;
begin
IBQuery.DisableControls;
with IBQuery do
begin
a.Text:=FieldByName('Field1').AsString;
b.CurId:=FieldByName('Field2').AsString;//combo
c.Text:=FieldByName('Field3').AsString;
d.Text:=FieldByName('Field4').AsString;

...

n.Text:=FieldByName('Fieldn').AsString;
//共40个控件
end;
IBQuery.EnableControls;
end;
whitetiger8 2003-12-18
  • 打赏
  • 举报
回复
可能是。因为有时你做处理不当,会导致一个动作就处理大量数据。所以特别慢
bigery 2003-12-18
  • 打赏
  • 举报
回复
学习!
angle097113 2003-12-18
  • 打赏
  • 举报
回复
估计就是你的AfterScroll事件里的代码的问题的吧
贴出来让大家分析下啊?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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