一个奇怪的关于TADODataSet的Filter属性的问题(100分)

  • 主题发起人 主题发起人 apzhang
  • 开始时间 开始时间
A

apzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DELPHI6(SP2)下用TADODataSet的Filter进行过滤,我有如下过滤条件:
条件1. 雇员='TC001' or 部门='00000' and 客户名称='Acer'
系统提示错误(应用程序使用的参数或者类型不正确,或者不在可以接受
的范围之内,要不就是与其他数据冲突)
我改变条件为:
条件2. 雇员='TC001' and 部门='00000' and 客户名称='Acer' 或
条件3. 雇员='TC001' or 部门='00000' or 客户名称='Acer' 或
条件4. 雇员='TC001' and 部门='00000' or 客户名称='Acer'
条件5. (雇员='TC001' and 客户名称='Acer') or ( 部门='00000' and 客户名称='Acer')
均不会出现上述错误, 但在程序中一定要用条件一, 请各位指点!!!

 
试试:用(雇员='TC001' or 部门='00000') and 客户名称='Acer'
是不是OR和AND优先级的问题呀!
 
((雇员='TC001' or 部门='00000') and 客户名称='Acer') and (其他条件)
((雇员='TC001' or 部门='00000') and 客户名称='Acer') or (其他条件)
 
To Sunkin,
(雇员='TC001' or 部门='00000') and 客户名称='Acer' 我已经试过了,不行,
能不能帮我试试,谢谢了!!

 
用sql语句
 
是不是里面的中文字符造成的呢?感觉像
 
就只这样的情况,使用SQL方便的很,为什么不考虑呢。
 
还是想请各位试一试在回答, 光说不试算什么?
 
我觉得你有两个问题:
1、你的表达式要表达什么样的效果你没有说清。(所以大家认为是你的表达式错,以是有上面的各种括号)
2、Filter的原理是在已经取得数据集SQL语句的基础上加上你的条件。(你要把用数据表打开的
方式也看作是select * from table, 事实上也是如此。query就不说了)所以你用Filter之前你要明白你
用ADODataSet是如何取得数据集的。

你不把问题整个说清,我们如何帮你?
 
同意楼上,我们不知道你的目的是什么啊?
 
操作优先级
第一级 @, not
第二级 *, /, div, mod, and, shl, shr, as
第三级 +, –, or, xor
第四级 =, <>, <, >, <=, >=, in, is

(雇员='TC001' or 部门='00000') and 客户名称='Acer'
变成先运算 'TC001' or 部门
 
我的ADODataSet的SQL是: SELECT * FROM 客户, 其中有三个字段,
雇员(varchar(5)),部门(varchar(2)),客户名称(varchar(40));

我要把雇员='TC001' 部门='00'的记录并满足客户名称='Acer'
的记录筛选出来, 因有其它功能限制, 不能直接使用SQL语句,
只能在FILTER上想办法, 拜托大家能够试一试, 分不够可以加, 谢谢拉!!!

本人使用DELPHI,VC,MSSQL数年,愿意与能解决本问题的朋友交朋友,
APZHANG@163.COM.

另外: to QuickSilver

((雇员='TC001') or (部门='00')) and (客户名称='Acer')
我也试过了, 也不行.....[:(][:(]

 
我在Access上用E文的字段名也试过了,不行、错误和你说的情况一样。但使用SQL语句可以。看来可能是一个bug。
另外不加括号不会变成QuickSilver说的情况,因为如果Filter错的话会提示错误的表达式。
apzhang: 想想别的方法吧。

踢一脚。
发生错误的代码在delphi安装路径下的source/vcl/adodb.pas的4608行。
余下我也不懂了。 :)
 
你就用你的条件5吧
 
哥们,你没装之前是不是对的?
如果是对的呢,关于sp2,delphi有一个Variant的Beta测试包,你可以装一下。
sp2的Variant有BUG
 
难道真的是一个BUG,应该不会,这种好像不是特别复杂,继续请求帮助SOS..........
 
接受答案了.
 
后退
顶部