最近显示了一些Delphi / InterBase应用程序
“记录未被其他用户找到或更改”
它们使用dbExpress的默认TSQLQuery/TClientDataSet (或dbExpress)组件。
我们发现,在数据库表中,非dbExpress应用程序在毫秒内存储了一个字段。
看起来,dbExpress没有从DB读取毫秒,并且在update表SQL语句的“where”条件中使用截断的值,因此没有要更新的匹配记录。
更新:我们在应用程序中使用TSQLTimeStamp字段。没有OnBeforePost处理程序正在修改字段值。
更新2
从IBExternals.pas中可以看出,PCTimeStructure没有毫秒部分。因此,在德尔菲(2009)中,“通过设计”不支持InterBase的毫秒。
有没有人知道特尔斐的后续版本中是否增加了?
发布于 2011-03-11 11:08:58
我猜这是时间戳 Interbase/Firebird客户机API,它不支持毫秒。这里是一个相关的火鸟跟踪问题。
更新:也可以看到这个回答。
发布于 2011-03-11 10:48:17
不太了解dbexpress,可以这么说,但它可能是正在进行修整的数据库。例如,我知道SQL server确实会减少传递给它的毫秒。您可以尝试时间戳列而不是日期时间(不确定确切名称)。也许时间戳列在您正在使用的数据库中确实有毫秒的分辨率。
发布于 2012-07-13 15:47:41
var
tmpDTS: string;
tmpDT: TDateTiume;
DateTimeToString(tmpDTS,'yyyy"."mm"."dd" "hh"."nn"."ss" "zzz',tmpDT);使用这种格式,我在Firebird表中插入了一个记录(通过TSQLQuery),而Flamerobin显示了确切的值。
相反,如果通过TDateTime参数插入值,则毫秒将被截断。DBGrid显示截断的值。
Delphi XE,Db Express,driver Firebird,Firebird 2.5.1。
https://stackoverflow.com/questions/5271799
复制相似问题