dbgrid 过滤的速度有关问题 附下代码

dbgrid 过滤的速度问题 附上代码
问题:一个编辑框中设置了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事件原因吧;
每输入一个字符,或者删除一个字符都会触发,当连续输入很长一串字符时,就会感觉到慢的,数量多时更慢

是否可以改成:加一个按扭,这段代码放到按扭事件中去,输入完毕就按下按扭
------解决方案--------------------
探讨
问题是 以前的程序也是用 onchange的方法来做的。速度非常快 没有停滞感。
用以前的程序和现在的程序都连同一个数据库 用此功能检索。以前的程序特别的快 而现在的程序 速度就非常的慢。

------解决方案--------------------
1、建立索引
2、看看你打开的数据内容,如果有图片或文件之类的本来就会很慢的。用select 语句,用到哪些字段就取哪些字段。
3、放在OnKeypress里,if key=#13 then ...
4、不要说以前怎样怎样,时间长了,你都忘记了以前都怎样怎样了,试试现在怎样实现目的才是主要的,也许现在的方法比以前合理呢。