问一个很复杂 的问题。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能识别的过滤条件。
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能识别的过滤条件。
解决方案 »
- Tclientdataset建立内存表做为RAVE报表中DATAVIEW的数据源,为什么DATAVIEW不能显示出字段来呢?
- 断网后如何重新连接
- 求DELPHI5.0补丁包
- 问一个问题?
- 拍卖,拍卖,两个PLMM。。。。。。
- 如何连ACCESS数据库?
- 请帮忙看看这样写有什么错误????
- 谁有D5可用的TsiLang组件,最好是4.95或以上,请发一份给我好吗?
- 各位高手,listview问题,急
- delphi-如何在一张图片上面新建一个透明图层?
- 小弟赖鸟问这里一个问题,关于DELPHI查询的,在线等/
- 请教关于TStringList的几个问题,a,b,c:TStringlist.问题1:怎样把a,b合并成c ,即:类似于:c := a+b.详细见内容。
http://www.daizhicun.com/bbs/dispbbs.asp?boardID=3&ID=1589&page=1