2016-04-18 92 views
1

DBExpressで書かれたアプリケーションを新しいFireDACコンポーネントを使用するように変換しています。クエリを開く、フィルタや順序を変更する、グリッドに表示するなどの基本的なことが正しく機能しています。しかし、dbexpressと比較していくつかの関数が異なって動作することに私は驚いています。私はそれを理解しているようです。FireDAC ApplyUpdatesとトランザクションコントロール

私のアプリケーションにはデータベースエディタが含まれています。ユーザーがエディタを開くと、 メソッドTFDConnection::StartTransactionを呼び出してトランザクションが開始されます。ユーザーが[OK]ボタンをクリックすると、アクティブなトランザクションがコミットされ、エディタが閉じます。

エディタでは、2つのクエリを使用してレコードを編集します。最初のクエリでは、手動でSQL更新コマンド( "update TEST set NAME='some name' where ID=1234"など)を作成して実行します。ここまでは順調ですね。

2番目のクエリはTDBAdvGridTDBGridからTMSソフトウェア会社に相当)に接続されており、CachedUpdates = trueを持っています。私がそのグリッドのレコードを変更した場合は、TFDQuery::PostTFDQuery::ApplyUpdatesと呼んでいます。

TFDQuery::ApplyUpdatesは、この特定のクエリでは保留中の変更だけでなく、インスタンスに接続されたすべてのクエリをTFDConnectionとします。私はApplyUpdatesの呼び出しがSQLの更新呼び出しを発行すべきだと考えましたが、トランザクション制御を妨げてはいけません。

データベースエディタウィンドウで彼が行ったすべての変更を拒否するオプションをユーザに与えたいと思います。どのように正しく行うには?ウィンドウを閉じるときにApplyUpdatesへの呼び出しを延期すべきですか? TFDQuery::CommitUpdatesTFDConnection::Commitの目的は、TFDQuery::ApplyUpdatesの呼び出しが必要な場合はどうなりますか?

答えて

0

TFDConnection :: TxOptions :: StopOptions :: xoIfCmdsInactiveをfalseに設定します。これにより、TFDConnection :: TxOptions :: AutoCommitオプションも無効になり、アプリケーションはトランザクションを単独で制御できます。

関連する問題