現在、クライアント/サーバー (TCP 経由) システムを保守しています。サーバーには複数のクライアント (せいぜい数十) がアクセスできるので、FireDAC のような接続プーリングをセットアップします。ほとんどの場合、問題なく動作します。私はまだ1つの問題を抱えています:
クライアント アプリケーションの 1 つが「書き込み」関数 ( nb : データベースへの書き込みを意味する関数) を呼び出し、同じリソースで読み取り関数を呼び出した直後に、古い値 (前回の更新前の値) を取得します。 . この結果は数秒/数百ミリ秒続き、その後、ドライバー層でプロセスが完全に終了していないかのように、結果は良好に戻ります。INSERT クエリでも同じ動作が見られます。
奇妙なことは、DB を更新するために使用している TFDQuery が (.Post 関数を介して) プロセスが終了したかのように非常に迅速に返されることです。amNonBlocking パラメータを使用していませんが、デフォルト値 (amBlocking) を使用しています。自然な動作は、データが完全に更新されたときにのみ .Post 関数が返されるが、明らかにそうではないということだと思います。それはFireDacの問題ですか?それはジェットエンジンの問題ですか?RecordLocking を使用する方法はありますか? MS-ACCESSを含む4つのDBMSで同じ動作を維持する必要があるため、危険だと思います。現在、MS-ACCESS データベースで Delphi XE6 を使用していますが、アプリケーションは Oracle、MS SQL、および PostgreSQL でも実行できる必要があります。
どうもありがとうございました