1

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

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

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

2 番目のクエリは( TMS Software 社からTDBAdvGridの同等の) に接続され、持っています。そのグリッドの一部のレコードを変更すると、 andを呼び出します。TDBGridCachedUpdates = trueTFDQuery::PostTFDQuery::ApplyUpdates

奇妙な呼び出しTFDQuery::ApplyUpdatesは、この特定のクエリで保留中の変更をコミットするだけでなく、 のインスタンスに接続されているすべてのクエリをコミットしますTFDConnectionApplyUpdatesの呼び出しはSQL 更新呼び出しを発行する必要がありますが、トランザクション制御に干渉するべきではないと考えました。

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

4

1 に答える 1

1

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

于 2016-04-19T09:03:44.003 に答える