问一个很复杂 的问题。AdoDataSet过滤的处理;我个人很喜欢AdoQuery.Filter 功能。但是复杂的过滤AdoQuery支持的能力没有直接用sql 的where条件实现灵活。比如:比如有一张表,其表结构为:
create table abc
(no   char(4), --编号
name char(8),  --名称
age  number   --年龄
)现在我想实现这样的查询:
   查询出 编号 包含 '100' 并且 名称 等于'1' 或 '2'  并且 年龄 等于10或11的记录很想当然的要写成:AdoQuery1.Filter:='no like ''%100%''   and (name=''1'' or name=''2'') and (age=10 or age=11)';但是这种格式不对,必须这样写才行:AdoQuery1.Filter:=   
         '    (no like ''%100%'' and    name=''1'' or age=10) 
        or  (no like ''%100%'' and    name=''1'' or age=11) 
       or  (no like ''%100%'' and    name=''2'' or age=10) 
       or (no like ''%100%'' and    name=''2'' or age=11) ';如果我们用一个函数把上边的 过滤条件 转换成下面这种,那该多好。同时我想到这其实就是可以类似乘法分配律 的算法那么如何做一个函数实现乘法分配律 比如:
    a*(b+c)*(d+e)=(a*b*d)+(a*b*e)+(a*c*d)+(a*c*e)如果我们已经知道左边这个 字符串  a*(b+c)*(d+e),那么我们是否可以做一个函数比如
  mul_distribute('a*(b+c)*(d+e)')='(a*b*d)+(a*b*e)+(a*c*d)+(a*c*e)' ;希望博艺老师能给我一个指点。最好的方法是能过某个设置,或者改造AdoQuery控件,让它的Filter支持AdoQuery1.Filter:='no like ''%100%''   and (name=''1'' or name=''2'') and (age=10 or age=11)';这种类似的模式,不行的话,我们就通过乘法分配律 算法,转换成AdoQuery1.Filter能识别的过滤条件。