SQLSetPos によるデータの更新

アプリケーションは、SQLSetPos を使用して行セット内の任意の行を更新または削除できます。 SQLSetPos の呼び出しは、SQL ステートメントを構築して実行する代わりに便利です。 これにより、データ ソースが配置された SQL ステートメントをサポートしていない場合でも、ODBC ドライバーは位置指定更新をサポートできます。 これは、関数呼び出しによって完全なデータベース アクセスを実現するためのパラダイムの一部です。

SQLSetPos は現在の行セットで動作し、SQLFetchScroll の呼び出し後にのみ使用できます。 アプリケーションは、更新、削除、または挿入する行の番号を指定し、ドライバーは行セット バッファーからその行の新しいデータを取得します。 SQLSetPos は、指定した行を現在の行として指定したり、データ ソースから行セット内の特定の行を更新したりするために使用できます。

行セットのサイズは、SQL_ATTR_ROW_ARRAY_SIZE の Attribute 引数を使用した SQLSetStmtAttr の呼び出しによって設定されます。 ただし、SQLSetPos では、SQLFetch または SQLFetchScroll の呼び出し後にのみ、新しい行セット サイズが使用されます。 例えば、行セット サイズが変更された場合、SQLSetPos が呼び出され、SQLFetch または SQLFetchScroll が呼び出され、SQLSetPos の呼び出しでは古い行セット サイズが使用され、SQLFetch または SQLFetchScroll では新しい行セット サイズが使用されます。

行セット内の先頭行の行番号は 1 です。 SQLSetPosRowNumber 引数は、行セット内の行を識別する必要があります。つまり、その値は、1 から最後にフェッチされた行の数 (行セット のサイズより小さい可能性があります) の範囲内である必要があります。 RowNumber が 0 の場合、操作は行セット内のすべての行に適用されます。

リレーショナル データベースとのやり取りのほとんどは SQL を介して行われるため、 SQLSetPos は広くサポートされていません。 ただし、ドライバーは、UPDATE または DELETE ステートメントを構築して実行することで簡単にエミュレートできます。

SQLSetPos がサポートする操作を決定するために、アプリケーションは 、(カーソルの種類に応じて) SQL_DYNAMIC_CURSOR_ATTRIBUTES1、SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1、SQL_KEYSET_CURSOR_ATTRIBUTES1、または SQL_STATIC_CURSOR_ATTRIBUTES1 情報オプションを使用して SQLGetInfo を呼び出します。

このセクションでは、次のトピックを扱います。