dbgrid 过滤的速度有关问题 附下代码
dbgrid 过滤的速度问题 附上代码
问题:一个编辑框中设置了onchange 输入的时候直接过滤数据。
以前的程序过滤速度特别快,输入编号的时候没有任何的停滞感。可是现在写的代码 过滤的速度特别慢。
以前的代码找不到了。 所以找大家好帮忙分析下我的代码哪里有情况 谢谢
------解决方案--------------------
不要在onchange 中处理,那样会每按一下按键就执行一次,改在按键事件以回车键触发:
问题:一个编辑框中设置了onchange 输入的时候直接过滤数据。
以前的程序过滤速度特别快,输入编号的时候没有任何的停滞感。可是现在写的代码 过滤的速度特别慢。
以前的代码找不到了。 所以找大家好帮忙分析下我的代码哪里有情况 谢谢
- Delphi(Pascal) code
dbgrid1.DataSource.DataSet.Filtered:=false; if trim(Edtspbh.text)='' then dbgrid1.DataSource.DataSet.Filter := '' else dbgrid1.DataSource.DataSet.Filter :='spbh = '''+UPPERCASE(Edtspbh.text)+'*'''; dbgrid1.DataSource.DataSet.Filtered:=true;
------解决方案--------------------
不要在onchange 中处理,那样会每按一下按键就执行一次,改在按键事件以回车键触发:
- Delphi(Pascal) code
...... procedure TForm1.EdtspbhKeyPress(Sender: TObject; var Key: Char); begin if key <> #13 then exit; if trim(Edtspbh.text)='' then dbgrid1.DataSource.DataSet.Filter := '' else dbgrid1.DataSource.DataSet.Filter :='spbh = '+Quotedstr(UPPERCASE(Edtspbh.text)+'*'); end; ......
------解决方案--------------------
代码没问题,可能是因为放在onchange事件原因吧;
每输入一个字符,或者删除一个字符都会触发,当连续输入很长一串字符时,就会感觉到慢的,数量多时更慢
是否可以改成:加一个按扭,这段代码放到按扭事件中去,输入完毕就按下按扭
------解决方案--------------------
------解决方案--------------------
1、建立索引
2、看看你打开的数据内容,如果有图片或文件之类的本来就会很慢的。用select 语句,用到哪些字段就取哪些字段。
3、放在OnKeypress里,if key=#13 then ...
4、不要说以前怎样怎样,时间长了,你都忘记了以前都怎样怎样了,试试现在怎样实现目的才是主要的,也许现在的方法比以前合理呢。