一个程序中,有一模块,要实现软件一个商品的拼音,就出现商品名称供选择。
有用单键提示,就是说,按一个键,就查询一次,得到拼音中含此键的商品列表,有两种方法。
方法A:var str:string;
procedure TFrm.EditChange(....)
begin
str:='select * from goods where goodspinyin like '+quotedstr(Edit.text);
With Query do
close;
sql.clear;
sql.add(str);
open;
end;
end;方法B:
窗口Create 的时候就 select * from goods
然后在 EditChange时使用Filter进行查询。我以为方法B中所有数据在Create时就已经得到了,后面再进行Filter是在本机上,速度应该很快,可是事实却事与愿违。方法A明显比方法B快(在赛扬800上做的测试,在我的P4上查觉不到差别)。方法B中每输入一个字母就停1,2秒左右,而方法A只停半秒左右。为什么呢?
有用单键提示,就是说,按一个键,就查询一次,得到拼音中含此键的商品列表,有两种方法。
方法A:var str:string;
procedure TFrm.EditChange(....)
begin
str:='select * from goods where goodspinyin like '+quotedstr(Edit.text);
With Query do
close;
sql.clear;
sql.add(str);
open;
end;
end;方法B:
窗口Create 的时候就 select * from goods
然后在 EditChange时使用Filter进行查询。我以为方法B中所有数据在Create时就已经得到了,后面再进行Filter是在本机上,速度应该很快,可是事实却事与愿违。方法A明显比方法B快(在赛扬800上做的测试,在我的P4上查觉不到差别)。方法B中每输入一个字母就停1,2秒左右,而方法A只停半秒左右。为什么呢?
B 方法需要首先返回所有的数据才能进行下一步filter
<-- 在窗体Create的时候,已经取回所有的数据了,也就是所 DataSet已经打开了。
所以有差别也就正常了