1

我正在尝试使用 dbplannercalender1 加载数据库数据。

procedure TForm1.DBPlannerCalendar1DaySelect(Sender: TObject;
  SelDate: TDateTime);
begin
with absQuery2 do
begin
  absQuery2.Close;
  absQuery2.sql.Clear;
  ABSQuery2.SQL.Text:='select * from log where date = :a1';
  ABSQUERY2.PARAMS.ParamByName('a1').value:= DBPlannerCalendar1.Date;
  ABSQuery2.ExecSQL;
end;
end;

我收到错误“预期的日期字符串”YYYY-MM-DD”,但是“=”在第 1 行找到...”我做错了什么?

4

2 回答 2

1

使用截断值 adoQuery.Parameters.paramByName('DataDal').value := trunc(edDate.Date);

于 2014-09-01T16:16:01.677 回答
0

使用AsDateTime代替Value, 让驱动程序将其转换为正确的格式:

AbsQuery2.Params.ParamByName('a1').AsDateTime := DBPlannerCalendar1.Date;

如果 AbsoluteAsDateTime由于某种原因不支持,请自行格式化日期:

AbsQuery2.Params.ParamByName('a1').Value := 
    FormatDateTime('yyyy-mm-dd`, DBPlannerCalendar1.Date);

第一种方法是最好的选择,因为它在数据库引擎之间更可移植(它适用于所有引擎,因为驱动程序将格式设置为日期的正确排列)。使用第二个意味着如果数据库期望不同于YYYY-MM-DD,您必须在任何使用日期的地方更改代码。

于 2012-08-06T00:38:10.490 回答