我写了一个ADOTable上的过滤条件:(A or B) and C
ABC都是简单的条件,在执行Filtered:=true的时候出错:
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another
我试过 ABC单独的每个条件都没有问题,A or B or C,A and B and C 都没有问题,就是and和or一起,再加上括号,就出错了
到底是什么原因呢?条件该怎么写呢?

解决方案 »

  1.   

    这么写试试:
    c and (a or b)
      

  2.   

    ((A)   or   (B))   and   (C)
    如果,A,B,C本身都是表达式的话,应该自身就加小括号
    不知道你的是不是这个问题 
      

  3.   

    To frank,叶:
    试过了,还是不行
      

  4.   

    是不是filter设置后,程序不报错,但不是你想要的结果?
    我刚才试了下能正常过滤啊
      

  5.   

    tblParam.Filtered:=false;
    tblParam.Filter:='kind_id=1 and (end_date>=''2008/02/22'' or end_date=null)';
    tblParam.Filtered:=true;跑到tblParam.Filtered:=true;的时候报错
    开始是有动态参数的,出错以后直接改成这样的,还是不行
      

  6.   

    刚测了一下,排除了DB的原因,SQL和oracle都报同样的错
    排除时间类型的错,测了字符串类型的条件也有同样问题现在很郁闷啊。。
      

  7.   

    测出个奇怪的问题了!!!A and B or C-------------okA or B and C------------error(A and B) or C----------okA and (B or C)-----------error
    SQLServer2000+ADO
      

  8.   

    谁来解释一下到底filter的逻辑是什么样子的啊!!
      

  9.   

    唉,测了一下午,好郁闷现在解决方法是:A and (B or C) 改成了 (A and B) or (A and C) 通过了这只是三个条件的逻辑,但要是再复杂一点的话麻烦就大了最后还是不晓得到底是什么原因,Filter真是个BT的东东!!!谢谢大家参加讨论,结贴吧