5

Firebird データベース (サーバー バージョン 2.1.3 で実行) があり、DBExpress オブジェクトを使用して (Interbase ドライバーを使用して) Delphi 2007 で接続しています。

データベース内の私のテーブルの1つはこのようになります

CREATE TABLE MYTABLE
(
  MYDATE Timestamp NOT NULL,
  MYINDEX Integer NOT NULL,
  ...
  Snip
  ...
  PRIMARY KEY (MYDATE ,MYINDEX)
);

テーブルに追加できます。Flame Robin では、タイムスタンプ フィールドにミリ秒の値があることが示されます。

しかしselect * from MYTABLE、テーブルで select 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 で試したドライバーとその結果を次に示します。

4

4 に答える 4

4

Firebird が実際にミリ秒をサポートしているかどうかはわかりませんが、Delphi 2007 の InterBase ドライバがサポートしていないことは知っています。これは、InterBase が C API でミリ秒を返さないためです。InterBase は DateTime をサブミリ秒の精度で格納しますが、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 に答える