1

最近、一部のDelphi/InterBaseアプリケーションが表示されます

「他のユーザーによってレコードが見つからないか、変更されていません」

これらは、dbExpressのデフォルトのTSQLQuery / TClientDataSet(またはTSimpleDataSet)コンポーネントを使用します。

データベーステーブルで、フィールドが非dbExpressアプリケーションによってミリ秒単位で格納されていることがわかりました。

dbExpressがDBからミリ秒を読み取らず、更新テーブルのSQLステートメントの「where」条件でその切り捨てられた値を使用したため、更新する一致するレコードがなかったようです。

更新:DelphiアプリケーションでTSQLTimeStampフィールドを使用しています。OnBeforePostハンドラーがフィールド値を変更していません。

アップデート2

IBExternals.pasに見られるように、PCTimeStructureにはミリ秒の部分がありません。したがって、「設計上」、Delphi(2009)のInterBaseではミリ秒はサポートされていません。

Delphiの新しいバージョンでmsサポートが追加されているかどうか誰かが知っていますか?

4

3 に答える 3

3

ミリ秒をサポートしていないのはisc_decode_timestampInterbase /FirebirdクライアントAPIだと思います。これは、関連するFirebirdトラッカーの問題です。

更新:この回答も参照してください。

于 2011-03-11T11:08:58.370 に答える
0

なんらかの形で言うのに十分なdbexpressを知らないが、トリミングを行っているのはデータベースである可能性がある。たとえば、SQLサーバーは渡されたミリ秒をドロップすることを私は知っています。DATETIMEの代わりにTIMESTAMP列を試すことができます(正確な名前はわかりません)。おそらく、TIMESTAMP列は、使用しているデータベースでミリ秒の解像度を持っています。

于 2011-03-11T10:48:17.570 に答える
-1
var
  tmpDTS: string;
  tmpDT: TDateTiume;

DateTimeToString(tmpDTS,'yyyy"."mm"."dd" "hh"."nn"."ss" "zzz',tmpDT);

この形式では、Firebirdテーブルに(TSQLQueryを介して)レコードを挿入すると、Flamerobinが正確な値を表示します。

代わりに、TDateTimeパラメーターを使用して値を挿入すると、ミリ秒が切り捨てられます。DBGridは、切り捨てられた値を表示します。

Delphi XE、Db Express、ドライバーFirebird、Firebird2.5.1。

于 2012-07-13T15:47:41.527 に答える