【发布时间】:2013-12-05 14:40:51
【问题描述】:
我有以下...
var
LCnn: TADOConnection;
qryGetData: TADOQuery;
begin
...
//build a connection string to a SQL Server 2008
...
qryGetData.Connection := LCnn;
qryGetData.SQL.Text := 'SELECT * FROM MYTABLE'
...
LDate := qryGetData.FieldByName('Date').AsDateTime; //Date its a datetime field in the table
end;
这很好用,但是当“日期”字段在某些 PC 中为 NULL 时,LDate 为 0,而在另一个中为 -36522。
知道吗??? 谢谢!
编辑:
奇怪的行为是
function TDateTimeField.GetAsDateTime: TDateTime;
begin
if not GetValue(Result) then Result := 0;
end;
在第一种情况下,GetValue 结果为假,因此 GetAsDateTime 结果为 0,在第二种情况下,GetValue 结果为真,因此返回 -36522 (01/01/1800)
【问题讨论】:
-
您的日期字段实际上是定义为数据库中的日期字段还是包含类似日期值的字符串字段,并且您依赖 FieldByName('Date').AsDateTime 进行转换给你?
-
如果您对相同数据得到不同的结果,请检查两台机器上安装的 OleDb 提供程序版本。
-
所有电脑都使用同一个数据库吗?如果不是,数据库是否来自同一制造商(MSSQL、Oracle、Firebird 等)?
-
是的,我们使用的是同一个数据库(MSSQL2008制造商)
-
我很确定这是一个环境问题,但不知道是什么。
标签: delphi ado delphi-xe4