今天遇到一个问题,查询某部门的数据后,要对这些数据进行多关键字的过滤,当用户在关键字编辑框用空格分开多个关键字,按下回车时就要过滤,将包含所有关键字的记录过滤出来。比如一条记录有20个字段,关键字有3个,当20个字段中的某些字段必须包含这3个关键字才能符合要求,如果只包含1个或2个关键字就要被过滤。
按照经验我首先想到了ADO的Filter,在关键字编辑框的KeyDown事件里写代码,定义Filter字串,然后Filter,一切都那么熟练,但是问题来了,字串的模型是这样的:(字段1 like '%关键字1%' or 字段2 like '%关键字1%' or 字段3 like '%关键字1%') and
(字段1 like '%关键字2%' or 字段2 like '%关键字2%' or 字段3 like '%关键字2%') and
(字段1 like '%关键字3%' or 字段2 like '%关键字3%' or 字段3 like '%关键字3%'),如果这样的模型写成的过滤字串在过滤时一定会出现“参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。”的错误提示,原因不太清楚,查了网上的资料也没人说的清楚,我的结论是,括号组合不能用and连接,如果括号组合用or 连接是可以的,但又不符合我的业务要求,在做了1天的尝试后,我放弃了,改用OnFilterRecord事件。下面是我的解决方案
一、重点代码
procedure TForm1.ADOQueryListFilterRec