在SQL附加的Delphi 7中输入表达式不匹配

Dem*_*ick 2 sql delphi

我有一个代码,它检查加载表单时的当前日期,执行简单的计算,并在Delphi中附加SQL.它适用于带有Delphi 7的Windows 7,另一台带有Xp的计算机,但不适用于其他3台带Xp的计算机.加载表单时,它会显示"表达式中的类型不匹配",并指向追加后的行.可能是什么问题呢?

procedure TfmJaunumi.FormCreate(Sender: TObject);
var d1, d2: TDate; 

begin  
 d1:= Date;  
 d2:= Date-30;  
 With qrJaunumi do
     begin
         Open;
         SQL.Append('WHERE Sanem_datums BETWEEN' + #39 + DateToStr(d1) +
         #39 + 'AND' + #39 + DateToStr(d2) + #39);
         Active := True; 
     end; 
end;
Run Code Online (Sandbox Code Playgroud)

Ger*_*oll 6

正如robsoft所说,这可能是国际化设置.您可以使用参数化查询 - 如果使用日期和时间,它们通常更简单.

此外,Open不需要在with的开头之后 - 实际上它将在没有您添加的WHERE子句的情况下打开查询.

 procedure TfmJaunumi.FormCreate(Sender: TObject);

 var d1, d2: TDate; 

 begin  d1:= Date;  d2:= Date-30;  With
 qrJaunumi do
         begin
         SQL.Append('WHERE Sanem_datums BETWEEN :StartDate AND :EndDate');
         // exact expression will vary according to DB connection type.
         // Example is for TADOQuery.
         Parameters.ParamByName('StartDate').Value := d1;
         Parameters.ParamByName('EndDate').Value := d2;
         Active := True; 
         end; 
 end;
Run Code Online (Sandbox Code Playgroud)