是TABLE中的FILTER吗???
好像不支持LIKE吧. 可以把这些语句写到TQUERY中去 作为条件WHERE...

解决方案 »

  1.   

    sql里不是用“*”来的吧,而是“%”吧
      

  2.   

    ACCESS 时比较特殊要为 * , 其它的数据库SQL 都为'%';FILTER不支持LIKE吧, 你把条件写到SQL里面不就行了..
      

  3.   

    like换成=
    把*放到外面用引号引起来。
      

  4.   

    sname是个变量吗?如果是变量,不能放在“”里的。
      

  5.   

    同意,hkhurus(野牛哥哥) ,Filter肯定不支持like,
    SQL可以这样写:select * from tablename where sName like :param1 OR sName like :param2 AND age like:param3
    在Query或dataset打开前,填写指定的参数(如果是模糊查询可在参数上加入通配符)
      

  6.   

    //可是我的Filter能支持LIKE语句呀?!
    xxx.Filter := 'sName like ''王%'' OR sName like ''刘%'' AND age = 16';//if 事实 > 雄辩 then
    //  调试调试
    //else 我闪;
      

  7.   

    to hkhurus: Access的LIKE语句确实要用"*"//可是在Delphi中还是用"%"//Delphi转换了一次
      

  8.   

    fliter = "sName like '王*'OR sName like '刘*' AND age = 16" 
    -----
    filter = 'sName like ' + '''' + '王*' + '''' + 'OR sName Like ' + 
    '''' + '刘*' + '''' + 'and  age= 16';我假设你是要在程序里拼串,而且sName是字段名.
      

  9.   

    Filter = 'sName like ' + ' 王*' + '  OR sName Like ' +  ' 刘*' + 'and  age= 16';
    然后自己用
    ShowMessage(Filter.Text);
    看看结果是不是:SName Like '王*' OR SName Like '刘*' And age=16
    多试试就知道其中的原理
      

  10.   

    大家理解错了,不是拼串的问题。我在CB下用的那段fliter.关键是filter怎么不支持这样的查询。两个OR加一个AND.大家试一下?
      

  11.   

    我用 fliter = "sName like '王*'OR sName like '刘*' 
     和  filter = "sName like '刘*' AND age = 16" 都可以过滤。但加到一起 
    fliter = "sName like '王*'OR sName like '刘*' AND age = 16" 
    却不能过滤!
      

  12.   

    filter = "(sName like '王*'OR sName like '刘*') AND age = 16"
      

  13.   

    Filters can compare field values to literals and to constants using the following comparison and logical operators:Operator Meaning
    < Less than
    > Greater than
    >= Greater than or equal to
    <= Less than or equal to
    = Equal to
    <> Not equal to
    AND Tests two statements are both True
    NOT Tests that the following statement is not True
    OR Tests that at least one of two statements is True
    + Adds numbers, concatenates strings, ads numbers to date/time values (only available for some drivers)
    - Subtracts numbers, subtracts dates, or subtracts a number from a date (only available for some drivers)
    * Multiplies two numbers (only available for some drivers)
    / Divides two numbers (only available for some drivers)
    * wildcard for partial comparisons (FilterOptions must include foPartialCompare)
      

  14.   

    try:
    fliter := 'sName="王*" OR sName="刘*" AND age=16';
      

  15.   

    我在PB中遇到过这种情况,原因是filter不支持两个like连用,and或者or都不行,解决的办法是用括号将其分开。我delphi刚学不久,不知道这样写行不行:
    fliter := "(sName like '王*') OR (sName like '刘*') AND age = 16"
      

  16.   

    :( 不行。我觉得这是不是Borland的一个BUG啊?
      

  17.   

    如果下面的再不对,那真的就是你的不对了。(我测试了DBDEMOS下的Animals.dbf)。
      Table1.Filter := '(NAME=''A*'' OR NAME=''O*'') AND SIZE=2';
      Table1.Filtered := True;
      

  18.   

    to chechy 谢谢你试了一下。你用的是什么数据集?我用的是ADODataSet。=不支持模糊查询。他查的是A*.只有like支持。(试验过).
     另外,你那样写我这也不行。但这样写可以
     "(Name like'a*' AND Size =2)OR(Name Like'b*' AND Size =2)"
     还希望你帮我想想这是怎么回事。分少还可以再加给你:)
      

  19.   

    显然我是用BDE测试的。那么,我再用ADO 测试一下。
      

  20.   

    好像是不行,不过依然可以补救。
    不用Filter,在DataSet的OnFilterRecord中写代码也可以。
    下面就是例子,我测试SQL Server的Northwind数据库的Orders表
    procedure TForm1.ADOQuery1FilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
      a: Integer;
      b: string;
    begin
      //(CUSTOMERID like 'V*'  OR CUSTOMERID like 'H*')
      a := DataSet.FieldByName('ShipVia').AsInteger;
      b := DataSet.FieldByName('CustomerID').AsString;
      Accept := ((b[1] = 'V') or (b[1] = 'H')) and (a = 2);
    end;怎么回事,我不清楚。因为我不常用ADO。
      

  21.   

    算了。我也不深究了。原因是我做了一个控件,可以让用户选择查询项。然后生成SQL查询语言。但TDataSet里没有类似CommandText的SQL语言。所以,只能用Filter.但filter也不好用。 看来基类只能用TADODataSet了。你有什么好的建议吗?
      

  22.   

    fliter = "sName = '王*'OR (sName = '刘*' AND age = 16) ";
    Filtered:=True