gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:40:44 25 4
gpt4 key购买 nike

我使用一条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;


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

最佳答案

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

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


感谢Abelisto为我指明了新的方向!我没想到要检查参数的类型。

关于sql - 为什么在Delphi XE7 64位和32位之间日期时间的处理方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com