我使用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;
对于我的生活,我不知道为什么会这样有效!
答案 0 :(得分:1)
我没有允许Delphi IDE为SQL参数指定默认类型的宽带,而是将类型更改为ftDateTime。然后代码行成为:
mftQuery.Parameters.ParamByName('startdate').value := DateToStr(startdatePicker.datetime);
mftQuery.Parameters.ParamByName('enddate').value := DateToStr(enddatePicker.datetime);
感谢Abelisto指引我走向新的方向!我没想过要查看参数的类型。