ドライバーの機能
次の表は、ODBC 3.x ドライバーがブロックおよびスクロール可能カーソルに実装する必要がある関数とステートメント属性をまとめたものです。
関数または statement 属性 |
説明 |
---|---|
SQL_ATTR_ROW_STATUS_PTR | SQLFetch と SQLFetchScroll によって入力される行ステータス配列のアドレスを設定します。 SQLSetPos がステートメント状態 S6 で呼び出された場合も、この配列は SQLSetPos によって入力されます。 状態 S7 で SQLSetPos が呼び出された場合、この配列は塗りつぶされませんが、SQLExtendedFetch の RowStatusArray 引数が指す配列が入力されます。 詳細については、「付録 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 ステートメント属性からフェッチされた行バッファーのアドレスを取得します。 - アプリケーションは、 SQLFetchScroll と SQLFetch の間で呼び出しを混在させることができます。 - 列 0 がバインドされている場合、SQLFetch はブックマークを返します。 - SQLFetch を呼び出して、複数の行を返すことができます。 - SQLFetch の呼び出しによって行がフェッチされている間にエラーが発生したことを示すために、ドライバーは SQLSTATE 01S01 (行内のエラー) を返しません。 |
SQLFetchScroll | 指定した行セットを返します。 実装の詳細を次に示します。 - ドライバーは、SQL_ATTR_ROW_ARRAY_SIZE ステートメント属性から行セット のサイズを取得します。 - ドライバーは、SQL_ATTR_ROW_STATUS_PTR ステートメント属性から行の状態配列のアドレスを取得します。 - ドライバーは、SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性からフェッチされた行バッファーのアドレスを取得します。 - アプリケーションは、 SQLFetchScroll と SQLFetch の間で呼び出しを混在させることができます。 - SQLFetchScroll の呼び出しによって行がフェッチされている間にエラーが発生したことを示すために、ドライバーは SQLSTATE 01S01 (行内のエラー) を返しません。 |
SQLSetPos | さまざまな配置操作を実行します。 実装の詳細を次に示します。 - これは、ステートメント状態 S6 または S7 で呼び出すことができます。 詳細については、「付録 B: ODBC 状態遷移テーブル」の 「ステートメント 遷移」を参照してください。 - これがステートメント状態 S5 または S6 で呼び出された場合、ドライバーは SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性から行セット サイズを取得し、SQL_ATTR_ROW_STATUS_PTR ステートメント属性から行状態配列のアドレスを取得します。 - これがステートメント状態 S7 で呼び出された場合、ドライバーは SQL_ROWSET_SIZE ステートメント属性から行セット サイズを取得し、SQLExtendedFetch の RowStatusArray 引数から行状態配列のアドレスを取得します。 - ドライバーは、SQLSTATE 01S01 (行内のエラー) を返します。これは、 SQLSetPos の呼び出しによって行がフェッチされ、関数が状態 S7 で呼び出されたときに一括操作を実行するときにエラーが発生したことを示すためだけに行われます。 下位互換性を維持するために、SQLState 01S01 (行のエラー) が SQLSetPos によって返された場合、ドライバー マネージャーは、 SQLGetDiagField の [状態レコードのシーケンス] セクションに記載されている規則に従って、エラー キュー内の状態レコードを並べ替えません。 - ドライバーが、SQL_ADD の Operation 引数を持つ SQLSetPos を呼び出す ODBC 2.x アプリケーションで動作する必要がある場合、ドライバーは、SQL_ADD の Operation 引数を持つ SQLSetPos をサポートする必要があります。 |