【发布时间】:2020-12-19 13:01:10
【问题描述】:
我有一个SQLite 数据库,其中一个表的类型为DATETIME。 SQLite表中DATETIME的格式为yyyy-mm-dd hh:nn:ss,PC中DATETIME的格式为mm/dd/yyyy hh:nn:ss ampm。当我将日期写入数据库时,它会自动转换为格式yyyy-mm-dd hh:nn:ss。但是当我尝试从表中读取它时,我得到econverter 错误,它表示yyyy-mm-dd hh:nn:ss 不是正确的格式。我的query 看起来像这样:
sqlQuery.SQL.Text := 'SELECT MAX(Pradzia) FROM Pamainos';
sqlQuery.Open();
ShiftPradzia := sqlQuery.Fields[0].AsDateTime; <-- I do get error here
sqlQuery.Close;
如果我像这样更改Query,那么我不会收到任何错误:
sqlQuery.SQL.Text := 'SELECT Pradzia FROM Pamainos WHERE ID = :_ID';
sqlQuery.Params.ParamByName('_ID').Value := fShiftID;
sqlQuery.Open();
ShiftPradzia := sqlQuery.Fields[0].AsDateTime;
sqlQuery.Close;
编辑: 确切的错误信息:
Project ProjectName.exe 引发异常类 EConverterError 消息“2020-12-19 13:34:24.743”不是有效的日期和时间。
编辑2: 也可以这样工作:
sqlQuery.SQL.Text := 'SELECT Pradzia FROM Pamainos WHERE Pradzia = (SELECT MAX(Pradzia) FROM Pamainos)';
【问题讨论】:
-
您应该给出您收到的确切错误消息以及在哪个代码行上。在访问结果集中的字段之前,您必须验证实际上至少有一个:如果不是 sqlQuery.EOF then begin ... end;并且当您要转换为 TDateTime 时,您必须确保字段值具有兼容的格式。
-
@fpiette 添加了 excat 错误消息。
-
当您的默认日期格式为
mm/dd/yyyy hh:nn:ss ampm时,文本2020-12-19无法转换,因为202不是有效的mm。解决方案:设置.AsDateTime()使用的日期格式,或者使用你喜欢的文本转换为TDateTime。
标签: sqlite datetime delphi firedac delphi-10.2-tokyo