为什么在Delphi XE7 64位和32位之间处理日期时间不同?

时间:2015-07-31 11:58:59

标签: sql delphi datetime 32bit-64bit

我使用SQL语句:

select * from manifests where mftDate between :startdate and :enddate

这是使用ADOQuery,xe7,Windows 7 64位。这些值是从日期时间选择器中选择的

mftQuery.Parameters.ParamByName('startdate').value := startdatePicker.datetime;
mftQuery.Parameters.ParamByName('enddate').value := enddatePicker.datetime;

当我从64位编译执行此操作时,一切正常。

当我重新编译为32位时,它会编译。但是,当我执行时,它会抛出参数类型错误的错误

如何将日期编码为在32位和64位版本下运行?

mftDate在MS SQL 2008中定义为日期,允许空值。

我尝试在datetime值上使用DateToStr()函数。不工作。但是,我编写了一个似乎现在正常工作的例程:

function TForm1.fixDate(myDate : TDateTime) : string;
var myYear, myMonth, myDay : word;
begin
  DecodeDate(myDate, myYear, myMonth, myDay);
  result := IntToStr(myYear) + '-' + IntToStr(myMonth) + '-' + IntToStr(myDay);
end;

对于我的生活,我不知道为什么会这样有效!

1 个答案:

答案 0 :(得分:1)

我没有允许Delphi IDE为SQL参数指定默认类型的宽带,而是将类型更改为ftDateTime。然后代码行成为:

mftQuery.Parameters.ParamByName('startdate').value := DateToStr(startdatePicker.datetime);
mftQuery.Parameters.ParamByName('enddate').value := DateToStr(enddatePicker.datetime);

感谢Abelisto指引我走向新的方向!我没想过要查看参数的类型。