起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 368|回复: 7

【结贴】帮忙改一下这个TQuery的过滤条件

[复制链接]
发表于 2010-7-13 15:45:18 | 显示全部楼层 |阅读模式
aQuery.Filter := ' DIFFERENCE_PRICE = ' + DataSetBrokerBC_DETAIL_DT.DataSet.FieldByName('DIFFERENCE_PRICE').AsString + ' AND to_date(to_char(INVALIDATION_DATE,''yyyy-mm-dd''),''yyyy-mm-dd'') = to_date('''+ SysUtils.DateToStr(DataSetBrokerBC_DETAIL_DT.DataSet.FieldByName('INVALIDATION_DATE').AsDateTime)+''',''yyyy-mm-dd'')' + sFilter;

这个SQL语句用在aQuery.CommandText里面是可以查询到数据的,但是改用在            aQuery.Filter 的时候,就会报以下异常,请问是TQuery不支持使用数据库的类型转换吗?应该怎么改?

1.jpg

11.41 KB, 下载次数: 170

回复

使用道具 举报

发表于 2010-7-13 16:08:14 | 显示全部楼层
你用的是Filter,用SQLFilter就可以了

to_date    是服务端的,不是客户端的函数,filter是客户端过滤不是服务端过滤
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-13 17:26:22 | 显示全部楼层
没有SQLFilter这个方法啊。
我是用TQuery控件查询出来,再将查询出来的数据集过滤,请问怎么才是服务端过滤?
回复 支持 反对

使用道具 举报

发表于 2010-7-14 09:19:51 | 显示全部楼层
不用filter 或者 SQLFilter,直接将filter部分作为where 条件部分,给Query 赋上就可以查找数据。
Filter使用在客户端过滤数据用的;不只是服务器端的相关函数。
SQLFilter只支持TSQLDataset类型的数据集在服务端的过滤。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-14 09:44:24 | 显示全部楼层
也就是说,我只能再向数据库查询一次?
我的需求是,我先查询出大范围内的数据,并取得它的数量给一个字段赋值,再对查询出来的数据进行过滤。

如果说TQuery不支持服务端过滤,那么,请问,如果要对TQuery查询出来的数据进行日期类型的比较,怎么写才不会报错?
多谢!
回复 支持 反对

使用道具 举报

发表于 2010-7-14 10:48:02 | 显示全部楼层
你给TQuery重新赋一遍SQL不就完了么?原来怎么写还怎么写。
回复 支持 反对

使用道具 举报

发表于 2010-7-14 11:23:01 | 显示全部楼层
回复5楼:
如果仅仅是 为了取一个数量,那么最好是 发sql的方式:select count(*)的方式。不建议按你5楼所描述的方式,这样效率是不一样的。

如果采用TQuery的话,改变条件后就是去修改的CommandText语句的where部分就可以。一般代码写法如下:
Query.Close
Query.CommandText := ' select * from table where 1=1 '
Query.Open;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-7-14 13:06:22 | 显示全部楼层
多谢,结贴吧。考虑到性能,采用两次分别查询。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 08:59 , Processed in 0.067140 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表