トランザクションをコミットまたはロールバックすると、カーソルとアクセス プランに次のいずれかの影響があります。
すべてのカーソルが閉じられ、その接続上で準備されたステートメントのアクセスプランが削除されます。
すべてのカーソルがすべて閉じられ、その接続に対する準備文のアクセスプランはそのまま維持されます。
すべてのカーソルは開いたままであり、その接続で準備されたステートメントに対するアクセスプランはそのまま残ります。
たとえば、データ ソースがこの一覧の最初の動作を示し、これらの動作の中で最も制限が厳しいとします。 次に、アプリケーションが次の処理を行う場合を想定します。
コミット モードを手動コミットに設定します。
明細 1 の販売注文の結果セットを作成します。
ユーザーがその注文を強調表示したときに、ステートメント 2 の販売注文の行の結果セットを作成します。
SQLExecute を呼び出して、ユーザーが行を更新するときに、ステートメント 3 で準備された位置指定の更新ステートメントを実行します。
SQLEndTran を呼び出して、配置された update ステートメントをコミットします。
データ ソースの動作により、手順 5 で SQLEndTran を呼び出すと、ステートメント 1 と 2 のカーソルが閉じられ、すべてのステートメントのアクセス プランが削除されます。 結果セットを再作成し、ステートメント 3 でステートメントを再表示するには、アプリケーションでステートメント 1 と 2 を再実行する必要があります。
自動コミット モードでは、 SQLEndTran コミット トランザクション以外の関数は次のようになります。
SQLExecute または SQLExecDirect 前の例では、手順 4 で SQLExecute を呼び出すとトランザクションがコミットされます。 これにより、データ ソースはステートメント 1 と 2 のカーソルを閉じ、その接続のすべてのステートメントのアクセス プランを削除します。
SQLBulkOperations または SQLSetPos 前の例では、ステートメント 3 で配置された更新ステートメントを実行するのではなく、手順 4 で sqlSetPos をステートメント 2 の SQL_UPDATE オプションで呼び出したとします。 これにより、トランザクションがコミットされ、データ ソースがステートメント 1 と 2 のカーソルを閉じ、その接続上のすべてのアクセス プランが破棄されます。
SQLCloseCursor 前の例では、ユーザーが別の販売注文を強調表示すると、アプリケーションがステートメント 2 で SQLCloseCursor を 呼び出してから、新しい販売注文の行の結果を作成するとします。 SQLCloseCursor を呼び出すと、行の結果セットを作成した SELECT ステートメントがコミットされ、データ ソースがステートメント 1 のカーソルを閉じ、その接続のすべてのアクセス プランが破棄されます。
アプリケーション(特に、ユーザーが結果セットをスクロールして行を更新または削除する画面ベースのアプリケーション)は、この動作に関するコードに注意する必要があります。
トランザクションがコミットまたはロールバックされたときにデータ ソースがどのように動作するかを判断するために、アプリケーションは、SQL_CURSOR_COMMIT_BEHAVIORオプションとSQL_CURSOR_ROLLBACK_BEHAVIORオプションを使用して SQLGetInfo を呼び出します。