两段同样意思的代码:
1.使用sql语句
SQLstr := 'SELECT COUNT(*) FROM CARS';
SQLstr := SQLstr + ' WHERE UNITID LIKE ''' + UnitId + '%''';
SQLstr := SQLstr + ' AND CARTYPEID LIKE ''' + ACarTypeId + '%''';
SQLstr := SQLstr + ' AND USEDATE BETWEEN ''' + DateToStr(dtpStart.Date)    + ''' AND ''' + DateToStr(dtpEnd.Date) + '''';
with adoqryCars do
begin
   Close;
   SQL.Clear;
   SQL.Add(SQLstr);
   Open;
end;
2.使用filter
SQLstr := 'UNITID LIKE ''' + UnitId + '%''';
    SQLstr := SQLstr + ' AND CARTYPEID LIKE ''' + ACarTypeId + '%''';
    SQLstr := SQLstr + ' AND USEDATE BETWEEN ''' + DateToStr(dtpStart.Date) + ''' AND ''' + DateToStr(dtpEnd.Date) + '''';
    with adoqryCars do
    begin
      Open;
      Filtered := False;
      Filter := SQLstr;
      Filtered := True;
end;其中adoqryCars的sql属性在开始赋值为select * from cars,及是有数据的。第一种表示方法,执行没有问题,第二种表示方法执行到Filter := True就出错:
Arguments are of the wrong type,are out of acceptable range,or are in conflict with another.请大家看看,问题出在什么地方???

解决方案 »

  1.   

    Filter不支持LIKE之类的,改为:
    SQLstr := 'UNITID = ''' + UnitId + '*''';
        SQLstr := SQLstr + ' AND CARTYPEID = ''' + ACarTypeId + '*''';
        SQLstr := SQLstr + ' AND USEDATE >= ''' + DateToStr(dtpStart.Date) + ''' AND USEDATE <= ''' + DateToStr(dtpEnd.Date) + '''';
        with adoqryCars do
        begin
          Open;
          Filtered := False;
          Filter := SQLstr;
          Filtered := True;
    end;
      

  2.   

    Filter支持如下操作符:
    < 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)
      

  3.   

    刚才跟踪了一下,发现filter不支持between,好像是支持like的。总之发现问题了,多谢!