次の方法で共有


ドライバーの機能

次の表は、ODBC 3.x ドライバーがブロックおよびスクロール可能カーソルに実装する必要がある関数とステートメント属性をまとめたものです。

関数または

statement 属性
説明
SQL_ATTR_ROW_STATUS_PTR SQLFetch と SQLFetchScroll によって入力される行ステータス配列のアドレスを設定します。 SQLSetPos がステートメント状態 S6 で呼び出された場合も、この配列は SQLSetPos によって入力されます。 状態 S7 で SQLSetPos が呼び出された場合、この配列は塗りつぶされませんが、SQLExtendedFetchRowStatusArray 引数が指す配列が入力されます。 詳細については、「付録 B: ODBC 状態遷移テーブル」の 「ステートメント 遷移」を参照してください。
SQL_ATTR_ROWS_FETCHED_PTR SQLFetch と SQLFetchScroll がフェッチされた行数を返すバッファーのアドレスを設定します。 SQLExtendedFetch が呼び出された場合、このバッファーは入力されませんが、RowCountPtr 引数はフェッチされた行数を指します。
SQL_ATTR_ROW_ARRAY_SIZE SQLFetch と SQLFetchScroll で使用される行セット サイズを設定します。
SQL_ROWSET_SIZE SQLExtendedFetch で使用される行セット のサイズを設定します。 ODBC 3.x ドライバーは、SQLExtendedFetch または SQLSetPos を呼び出す ODBC 2.x アプリケーションで動作する場合に、これを実装します。
SQLBulkOperations ODBC 3.x ドライバーが、SQL_ADDの操作SQLSetPos を使用する ODBC 2.x アプリケーションで動作する必要がある場合、ドライバーは、SQL_ADDの操作を使用した SQLBulkOperations に加えて、SQL_ADDの操作SQLSetPos をサポートする必要があります。
SQLExtendedFetch 指定した行セットを返します。 ODBC 3.x ドライバーは、SQLExtendedFetch または SQLSetPos を呼び出す ODBC 2.x アプリケーションで動作する場合に、これを実装します。 実装の詳細を次に示します。

- ドライバーは、SQL_ROWSET_SIZE ステートメント属性の値から行セット サイズを取得します。
- ドライバーは、SQL_ATTR_ROW_STATUS_PTR ステートメント属性ではなく、 RowStatusArray 引数から行状態配列のアドレスを取得します。 SQLExtendedFetch の呼び出しの RowStatusArray 引数を null ポインターにすることはできません。 (ODBC 3.x では、SQL_ATTR_ROW_STATUS_PTR ステートメント属性に null ポインターを指定できることに注意してください)。
- ドライバーは、SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性ではなく、 RowCountPtr 引数からフェッチされた行のバッファーのアドレスを取得します。
- ドライバーは SQLSTATE 01S01 (行内のエラー) を返し、 SQLExtendedFetch の呼び出しによって行がフェッチされている間にエラーが発生したことを示します。 ODBC 3.x ドライバーは、SQLFetch または SQLFetchScroll が呼び出されたときではなく、SQLExtendedFetch が呼び出された場合にのみ SQLSTATE 01S01 (行のエラー) を返す必要があります。 下位互換性を維持するために、SQLState 01S01 (行内のエラー) が SQLExtendedFetch によって返された場合、ドライバー マネージャーは、 SQLGetDiagField の [状態レコードのシーケンス] セクションに記載されている規則に従って、エラー キュー内の状態レコードを並べ替えません。
SQLFetch 次の行セットを返します。 実装の詳細を次に示します。

- ドライバーは、SQL_ATTR_ROW_ARRAY_SIZE ステートメント属性の値から行セット サイズを取得します。
- ドライバーは、SQL_ATTR_ROW_STATUS_PTR ステートメント属性から行の状態配列のアドレスを取得します。
- ドライバーは、SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性からフェッチされた行バッファーのアドレスを取得します。
- アプリケーションは、 SQLFetchScrollSQLFetch の間で呼び出しを混在させることができます。
- 列 0 がバインドされている場合、SQLFetch はブックマークを返します。
- SQLFetch を呼び出して、複数の行を返すことができます。
- SQLFetch の呼び出しによって行がフェッチされている間にエラーが発生したことを示すために、ドライバーは SQLSTATE 01S01 (行内のエラー) を返しません。
SQLFetchScroll 指定した行セットを返します。 実装の詳細を次に示します。

- ドライバーは、SQL_ATTR_ROW_ARRAY_SIZE ステートメント属性から行セット のサイズを取得します。
- ドライバーは、SQL_ATTR_ROW_STATUS_PTR ステートメント属性から行の状態配列のアドレスを取得します。
- ドライバーは、SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性からフェッチされた行バッファーのアドレスを取得します。
- アプリケーションは、 SQLFetchScrollSQLFetch の間で呼び出しを混在させることができます。
- SQLFetchScroll の呼び出しによって行がフェッチされている間にエラーが発生したことを示すために、ドライバーは SQLSTATE 01S01 (行内のエラー) を返しません。
SQLSetPos さまざまな配置操作を実行します。 実装の詳細を次に示します。

- これは、ステートメント状態 S6 または S7 で呼び出すことができます。 詳細については、「付録 B: ODBC 状態遷移テーブル」の 「ステートメント 遷移」を参照してください。
- これがステートメント状態 S5 または S6 で呼び出された場合、ドライバーは SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性から行セット サイズを取得し、SQL_ATTR_ROW_STATUS_PTR ステートメント属性から行状態配列のアドレスを取得します。
- これがステートメント状態 S7 で呼び出された場合、ドライバーは SQL_ROWSET_SIZE ステートメント属性から行セット サイズを取得し、SQLExtendedFetchRowStatusArray 引数から行状態配列のアドレスを取得します。
- ドライバーは、SQLSTATE 01S01 (行内のエラー) を返します。これは、 SQLSetPos の呼び出しによって行がフェッチされ、関数が状態 S7 で呼び出されたときに一括操作を実行するときにエラーが発生したことを示すためだけに行われます。 下位互換性を維持するために、SQLState 01S01 (行のエラー) が SQLSetPos によって返された場合、ドライバー マネージャーは、 SQLGetDiagField の [状態レコードのシーケンス] セクションに記載されている規則に従って、エラー キュー内の状態レコードを並べ替えません。
- ドライバーが、SQL_ADD の Operation 引数を持つ SQLSetPos を呼び出す ODBC 2.x アプリケーションで動作する必要がある場合、ドライバーは、SQL_ADD の Operation 引数を持つ SQLSetPos をサポートする必要があります。