我程序中的adoquery的filter:
设置为:'a <> 0 and b = 2 OR c = 3'时正常,
但当为:'a <> 0 and ((b = 2) or (c = 3))'时报错:变量或者类型不正确,或者不在可以接受的范围之内,要不就是与其他数据冲突,请问是为什么?

解决方案 »

  1.   

    试试这样'a<>0 and (b=2 or c=3)',你上面应该是操作符使用不当。因为你是要判断的是a<>0而且b=2或者c=3,所以错了。
      

  2.   

    to studysupermap(aaazha) :
    也不行,只要带括号就不行,不带可以,不知道错在那里
      

  3.   

    filter不支持这样的过滤。
    使用OnFilterrecord
      

  4.   

    能否请楼上说得详细一些,filter为什么不支持这样的过滤?我的filter是动态生成的,我把生长的值拷贝到adoquery的filter属性中,然后active设为true就可以,但在程序中动态生成赋值时就不行
      

  5.   

    'a>0 and'+#39+'('+#39+'b=3 or c=9'+#39+')'+#39
    我的这样可以。
      

  6.   

    不要问我为什么
    我也不知道,应该是ado自身的缺陷。问微软吧。
    filter中
    '(a <> 0 and b = 2) OR c = 3'
    '(a <> 0 and b = 2) AND c = 3'
    '(a <> 0 OR b = 2) OR c = 3'
    都是可以的
    '(a <> 0 or b = 2) and c = 3'
    不可以。'a <> 0 and b = 2 OR c = 3'
    相当于'(a <> 0 and b = 2) OR c = 3'生成的值拷贝到adoquery的filter属性中:
    你使用“(a <> 0 or b = 2) and c = 3”看看,一定不可以!
     studysupermap:
    'a>0 and'+#39+'('+#39+'b=3 or c=9'+#39+')'+#39
    可以吗?我很怀疑.
    其最终的格式是:
    a>0 and'('b=3 or c=9')'
    这样可以用??
      

  7.   

    不过对于你的这种情况,有一个办法可以解决:
    a <> 0 and (b = 2 OR c = 3)//不可以
    但是等价于:
    (a <> 0 and b = 2) OR (a<>0 and c = 3)(只能先and后or, 不能先or后and)