Delphi 2007でfirebirdのタイムスタンプフィールドからミリ秒値を取得する方法

StackOverflow https://stackoverflow.com/questions/1422268

質問

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)
);

テーブルに追加しても問題ありません。FlameRobinでは、タイムスタンプフィールドにミリ秒の値が表示されます。

しかし、テーブルですべて選択( 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で試したドライバーとその結果を次に示します。

役に立ちましたか?

解決

Firebirdが実際にミリ秒をサポートするかどうかはわかりませんが、Delphi 2007のInterBaseドライバーがサポートしないことは事実です。これは、InterBaseがC APIでミリ秒を返さないためです。 InterBaseはDateTimesをミリ秒未満の精度で保存しますが、InterBase APIはミリ秒フィールドを含まないC TM構造体で時刻を返します。したがって、InterBase用に設計されたdbExpressドライバーはそれをサポートしません。そのため、Firebirdが実際にこれを完全にサポートしていると仮定して、少なくともドライバーを変更する必要があります。

他のヒント

私の同僚( 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 FAQ#305 は、単純なvarchar CASTを使用してこれを簡単に回避する方法を説明しています。

Firebird dbxドライバーが存在します(試すことができます):

http://sites.google.com/site/dbxfirebird/ (無料)

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top