Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi xe2 在选择日期时从数据库加载数据_Delphi Xe2_Delphi Xe - Fatal编程技术网

Delphi xe2 在选择日期时从数据库加载数据

Delphi xe2 在选择日期时从数据库加载数据,delphi-xe2,delphi-xe,Delphi Xe2,Delphi Xe,我正在尝试使用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';

我正在尝试使用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行找到“=”
我做错了什么?

使用
AsDateTime
而不是
Value
,让驾驶员将其转换为正确的格式:

AbsQuery2.Params.ParamByName('a1').AsDateTime := DBPlannerCalendar1.Date;
如果出于某种原因,Absolute不支持AsDateTime,请自行设置日期格式:

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

第一种方法是最好的选择,因为它在数据库引擎之间的可移植性更强(它适用于所有的引擎,因为driverr将格式转换为日期的正确排列)。使用第二种方法意味着,如果DB期望的内容不同于
YYYY-MM-DD
,则必须在使用日期的任何地方更改代码。

使用
AsDateTime
而不是
Value
,以便让驱动程序将其转换为正确的格式:

AbsQuery2.Params.ParamByName('a1').AsDateTime := DBPlannerCalendar1.Date;
如果出于某种原因,Absolute不支持AsDateTime,请自行设置日期格式:

AbsQuery2.Params.ParamByName('a1').Value := 
    FormatDateTime('yyyy-mm-dd`, DBPlannerCalendar1.Date);
第一种方法是最好的选择,因为它在数据库引擎之间的可移植性更强(它适用于所有的引擎,因为driverr将格式转换为日期的正确排列)。使用第二种方法意味着,如果DB预期的值不同于
YYYY-MM-DD
,则必须在使用日期的任何地方更改代码。

使用trunced值 adoQuery.Parameters.paramByName('DataDal')。值:=trunc(edDate.Date)

使用真实值
adoQuery.Parameters.paramByName('DataDal')。值:=trunc(edDate.Date)

那么您就不会发布实际的SQL文本,因为那里没有错误。(我的第二个示例中的
FormatDateTime
date格式有一个错误,我已经修复了)。您尝试了我发布的两个解决方案中的哪一个?ABSQUERY2.PARAMS.ParamByName('a1')。值:=FormatDateTime('YYYY-MM-DD',DBPlannerCalendar1.date);不起作用。我仍然会犯同样的错误。试一下我给你的第一个选项(我说你首先应该选择的那个,并在我的最后一段中解释了为什么你应该选择它)
AbsQuery2.Params.ParamByName('a1')。AsDateTime
而不是
Value
。然后发布您真正的SQL,因为您在问题中发布的不是它。您问题中的SQL不会在我发布的任何版本的代码中引发该异常,因此您没有发布真实的查询文本。您所说的真实是什么意思?这就是所有的代码。我只想根据DBPlannerCalendar1中选择的日期从数据库中获取数据,而不是发布实际的SQL文本,因为没有错误。(我的第二个示例中的
FormatDateTime
date格式有一个错误,我已经修复了)。您尝试了我发布的两个解决方案中的哪一个?ABSQUERY2.PARAMS.ParamByName('a1')。值:=FormatDateTime('YYYY-MM-DD',DBPlannerCalendar1.date);不起作用。我仍然会犯同样的错误。试一下我给你的第一个选项(我说你首先应该选择的那个,并在我的最后一段中解释了为什么你应该选择它)
AbsQuery2.Params.ParamByName('a1')。AsDateTime
而不是
Value
。然后发布您真正的SQL,因为您在问题中发布的不是它。您问题中的SQL不会在我发布的任何版本的代码中引发该异常,因此您没有发布真实的查询文本。您所说的真实是什么意思?这就是所有的代码。我只想根据DBPlannerCalendar1中选择的日期从数据库中获取数据。您连接到哪种SQL server?Sql Server?MySQL?看起来“date”有一些特殊的含义,而您希望它引用日志表的一列。日志表的模式是什么?可能尝试使用log.date而不是date?您连接的是哪种SQL server?Sql Server?MySQL?看起来“date”有一些特殊的含义,而您希望它引用日志表的一列。日志表的模式是什么?也许试试log.date而不是date?