Re0*_*ess 5 sql delphi firebird dbexpress delphi-2007
我有一个Firebird数据库(在服务器版本2.1.3上运行)并使用DBExpress对象(使用Interbase驱动程序)与Delphi 2007连接
我在数据库中的一个表看起来像这样
CREATE TABLE MYTABLE
(
  MYDATE Timestamp NOT NULL,
  MYINDEX Integer NOT NULL,
  ...
  Snip
  ...
  PRIMARY KEY (MYDATE ,MYINDEX)
);
我可以添加到表中,然后在Flame Robin中将时间戳字段显示为具有毫秒值.
但是当我select * from MYTABLE在表上选择all()时,我无法获得毫秒值,因为它总是以000返回.
这会导致重大问题,因为它是主键的一部分(遗憾的是我没有设计表并且无权更改它).
我尝试了以下内容来获取毫秒值:
sql1.fieldbyname('MYDATE').AsDateTime;
sql1.fieldbyname('MYDATE').AsSQLTimeStamp;
sql1.fieldbyname('MYDATE').AsStirng;
sql1.fieldbyname('MYDATE').AsFloat;
但是格式化时他们都会返回14/09/2009 14:25:06.000.
如何从时间戳中检索毫秒?
更新: 如果这有助于将来的任何人,这里是我为DBExpress尝试的驱动程序和结果.
我的一位同事(Edwin van der Kraan)刚刚检查过:它适用于FIBplus!
他检查了FIBPlus版本6.9.6和Firebird 2.1.1.
他插入一个current_timestamp插入,然后将其解压缩.FormatDateTime('dd-mm-yyyy hh:nn:ss:zzz', TestpFIBDataSetMYDATE.Value)
然后他返回日期和时间,包括毫秒.
--jeroen
我不知道 Firebird 是否真的支持毫秒,但我知道 Delphi 2007 的 InterBase 驱动程序不支持毫秒。这是因为 InterBase 在其 C API 中不返回毫秒;虽然 InterBase 将 DateTimes 存储到亚毫秒精度,但 InterBase API 在不包含毫秒字段的 C TM 结构中返回时间。因此,为 InterBase 设计的 dbExpress 驱动程序将不支持该功能。因此,假设 Firebird 实际上支持这一点,您至少需要更改驱动程序。
| 归档时间: | 
 | 
| 查看次数: | 3700 次 | 
| 最近记录: |