5

我有一个 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在表上执行全选 () 时,我无法获得毫秒值,因为它始终返回为 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 尝试的驱动程序和结果。

4

4 回答 4

5

我的一位同事 ( 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) 然后他取回了包括毫秒在内的日期和时间。

——杰伦

于 2009-09-14T18:55:40.300 回答
4

我不知道 Firebird 是否真的支持毫秒,但我知道 Delphi 2007 的 InterBase 驱动程序不支持这一事实。这是因为 InterBase 在其 C API 中不返回毫秒;尽管 InterBase 将 DateTimes 存储到亚毫秒精度,但 InterBase API 在不包含毫秒字段的 C TM 结构中返回时间。因此,为 InterBase 设计的 dbExpress 驱动程序不会支持它。因此,您至少需要更改驱动程序,假设 Firebird 完全支持这一点。

于 2009-09-14T15:37:35.937 回答
3

Firebird FAQ #305解释了如何通过简单的 varchar CAST 轻松解决这个问题。

于 2010-05-03T10:32:23.040 回答
1

存在 Firebird dbx 驱动程序(您可以尝试它们):

http://sites.google.com/site/dbxfirebird/(免费)

http://www.upscene.com/products.dbx.dbx_fb.php

于 2009-09-14T19:19:53.457 回答