两段同样意思的代码:
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.使用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.请大家看看,问题出在什么地方???
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;
< 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)