SQLExtendedFetch 関数
準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: Deprecated
まとめ
SQLExtendedFetch は、結果セットから指定されたデータ行セットをフェッチし、バインドされているすべての列のデータを返します。 行セットは、絶対位置または相対位置、またはブックマークで指定できます。
Note
ODBC 3*.x* では、 SQLExtendedFetch は SQLFetchScroll に置き換えられました。 ODBC 3*.x* アプリケーションでは、 SQLExtendedFetch を呼び出さないでください。代わりに、 SQLFetchScroll を呼び出す必要があります。 ドライバー マネージャーは、ODBC 2*.x* ドライバーを操作するときに、 SQLFetchScroll を SQLExtendedFetch にマップします。 ODBC 3*.x* ドライバーは、それを呼び出す ODBC 2*.x* アプリケーションで動作する場合SQLExtendedFetch をサポートする必要があります。 詳細については、「付録 G: ドライバーの下位互換性のガイドライン」の「コメント」および「 Block カーソル、スクロール可能なカーソル、および下位互換性 を参照してください。
構文
SQLRETURN SQLExtendedFetch(
SQLHSTMT StatementHandle,
SQLUSMALLINT FetchOrientation,
SQLLEN FetchOffset,
SQLULEN * RowCountPtr,
SQLUSMALLINT * RowStatusArray);
引数
StatementHandle
[入力]ステートメント ハンドル。
FetchOrientation
[入力]フェッチの種類。 これは、SQLFetchScroll の FetchOrientation と同じです。
FetchOffset
[入力]フェッチする行の番号。 これは、SQLFetchScroll の FetchOffset と同じですが、1 つの例外があります。 FetchOrientationがSQL_FETCH_BOOKMARKされている場合、FetchOffset は固定長ブックマークであり、ブックマークからのオフセットではありません。 つまり、 SQLExtendedFetch は、SQL_ATTR_FETCH_BOOKMARK_PTR ステートメント属性ではなく、この引数からブックマークを取得します。 可変長ブックマークはサポートされず、ブックマークからのオフセット (0 以外) での行セットのフェッチはサポートされません。
RowCountPtr
[出力]実際にフェッチされた行数を返すバッファーへのポインター。 このバッファーは、SQL_ATTR_ROWS_FETCHED_PTR ステートメント属性で指定されたバッファーと同じ方法で使用されます。 このバッファーは、 SQLExtendedFetch によってのみ使用されます。 これは、 SQLFetch または SQLFetchScroll では使用されません。
RowStatusArray
[出力]各行の状態を返す配列へのポインター。 この配列は、SQL_ATTR_ROW_STATUS_PTR ステートメント属性で指定された配列と同じ方法で使用されます。
ただし、この配列のアドレスは IRD の SQL_DESC_STATUS_ARRAY_PTR フィールドには格納されません。 さらに、この配列は、SQLExtendedFetchとSQLBulkOperations によってのみ使用されsqlExtendedFetch後に呼び出されたときにSQL_ADDまたはSQLSetPosのOperation。 SQLFetch または SQLFetchScroll では使用されず、
アプリケーションは、RowStatusArray 引数に有効なポインターを提供する必要があります。そうでない場合は、SQLExtendedFetchの動作、およびカーソルがSQLExtendedFetchによってカーソルが配置された後のSQLBulkOperationsまたはSQLSetPosの呼び出しの動作が未定義になります。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NO_DATA、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。
診断
SQLExtendedFetchがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、SQLError を呼び出すことによって、関連付けられた SQLSTATE 値を取得できます。 次の表に、 SQLExtendedFetch によって一般的に返される SQLSTATE 値を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATE の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。 1 つの列でエラーが発生した場合は、 SQLGetDiagField を DiagIdentifier SQL_DIAG_COLUMN_NUMBER で呼び出してエラーが発生した列を特定できます。また、 SQLGetDiagField は、SQL_DIAG_ROW_NUMBERの DiagIdentifier で呼び出して、その列を含む行を特定できます。
SQLSTATE | エラー | 説明 |
---|---|---|
01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
01004 | 文字列データ、右切り捨て | 列に対して返された文字列またはバイナリ データは、非空白文字または NULL 以外のバイナリ データが切り捨てられました。 文字列値の場合は、右に切り捨てられました。 数値の場合、数値の小数部が切り捨てられました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
01S01 | 行のエラー | 1 つ以上の行のフェッチ中にエラーが発生しました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
01S06 | 結果セットが最初の行セットを返す前にフェッチを試みる | 要求された行セットは、現在の位置が最初の行を超えたときに結果セットの先頭と重なり、 FetchOrientation がSQL_PRIORされたか FetchOrientation が現在のSQL_ROWSET_SIZE以下の負の FetchOffset でSQL_RELATIVEされました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
01S07 | 小数部の切り捨て | 列に対して返されたデータが切り捨てられました。 数値データ型の場合、数値の小数部が切り捨てられました。 時刻、タイムスタンプ、および時刻コンポーネントを含む間隔データ型の場合、時刻の小数部が切り捨てられました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
07006 | 制限付きデータ型属性違反 | SQLBindCol の TargetType で指定された C データ型にデータ値を変換できませんでした。 |
07009 | 記述子インデックスが無効です | 列 0 が SQLBindCol にバインドされ、SQL_ATTR_USE_BOOKMARKS ステートメント属性が SQL_UB_OFF に設定されました。 |
08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
22002 | インジケーター変数は必須ですが、指定されていません | NULL データは、SQLBindCol によって設定されたStrLen_or_IndPtrが null ポインターである列にフェッチされました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
22003 | 範囲外の数値 | 1 つ以上の列の数値 (数値または文字列) を返すと、数値の一部全体 (小数部ではなく) が切り捨てられる可能性があります。 (関数はSQL_SUCCESS_WITH_INFOを返します。 詳細については、「付録 D: データ型」の「間隔データ型と数値データ型の ガイドライン 」を参照してください。 |
22007 | datetime 形式が無効です | 結果セット内の文字列が日付、時刻、またはタイムスタンプ C 構造体にバインドされ、列の値がそれぞれ無効な日付、時刻、またはタイムスタンプでした。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
22012 | 0 で除算しました | 算術式から値が返され、結果として 0 で除算されました。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
22015 | 間隔フィールドのオーバーフロー | 正確な数値または間隔の SQL 型から間隔 C 型に割り当てると、先頭フィールドの有効桁数が失われます。 間隔 C 型にデータをフェッチするときに、間隔 C 型の SQL 型の値の表現がありませんでした。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
22018 | キャスト指定の文字値が無効です | C 型は、正確または概数、datetime、または間隔データ型でした。列の SQL 型は文字データ型でした。列の値が、バインドされた C 型の有効なリテラルではありません。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
24000 | カーソル状態が無効 | StatementHandle は実行された状態でしたが、結果セットは StatementHandle に関連付けされませんでした。 |
HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLError によって返されるエラー メッセージは、エラーとその原因を示します。 |
HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY008 | 操作が取り消されました | StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle が StatementHandle で呼び出され、 StatementHandle で関数が再度呼び出されました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーション内の別のスレッドから StatementHandle で呼び出されました。 |
HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLExtendedFetch 関数が呼び出されたときに、まだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResults StatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) 指定した StatementHandle が実行された状態にありません。 この関数は、最初に SQLExecDirect、 SQLExecute、またはカタログ関数を呼び出さずに呼び出されました。 (DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 (DM) SQLExtendedFetch は、 SQLFetch または SQLFetchScroll が呼び出された後SQLFreeStmtが SQL_CLOSE オプションで呼び出された後に呼び出されました。 (DM) SQLBulkOperationsSQLFetch、SQLFetchScroll、または SQLExtendedFetch が呼び出される前にステートメントに対して呼び出され、SQLFreeStmt が SQL_CLOSE オプションで呼び出される前に、 |
HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
HY106 | フェッチの種類が範囲外 | (DM) 引数 FetchOrientation に指定された値が無効です。 (「コメント」を参照してください。) 引数 FetchOrientation がSQL_FETCH_BOOKMARKされ、SQL_ATTR_USE_BOOKMARKS ステートメント属性がSQL_UB_OFFに設定されました。 SQL_CURSOR_TYPE ステートメント オプションの値がSQL_CURSOR_FORWARD_ONLYされ、引数 FetchOrientation の値がSQL_FETCH_NEXTされませんでした。 引数 FetchOrientation がSQL_FETCH_RESUMEされました。 |
HY107 | 範囲外の行の値 | SQL_CURSOR_TYPEステートメント・オプションで指定された値はSQL_CURSOR_KEYSET_DRIVENされましたが、SQL_KEYSET_SIZE ステートメント属性で指定された値が 0 より大きく、SQL_ROWSET_SIZE ステートメント属性で指定された値より小さい値でした。 |
HY111 | ブックマーク値が無効です | 引数 FetchOrientation がSQL_FETCH_BOOKMARKされ、 FetchOffset 引数で指定されたブックマークが無効でした。 |
HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
HYC00 | 省略可能な機能が実装されていません | ドライバーまたはデータ ソースは、指定されたフェッチの種類をサポートしていません。 ドライバーまたはデータ ソースは、SQLBindCol の TargetType と対応する列の SQL データ型の組み合わせで指定された変換をサポートしていません。 このエラーは、列の SQL データ型がドライバー固有の SQL データ型にマップされている場合にのみ適用されます。 |
HYT00 | タイムアウトの期限が切れました | データ ソースが結果セットを返す前に、クエリのタイムアウト期間が期限切れになりました。 タイムアウト期間は、SQL_QUERY_TIMEOUT SQLSetStmtOption によって設定されます。 |
HYT01 | 接続のタイムアウト | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
IM001 | ドライバーは、この関数をサポートしていません | (DM) StatementHandle に関連付けられているドライバーは、関数をサポートしていません。 |
Comments
SQLExtendedFetch の動作は、SQLFetchScrollの動作と同じですが、次の例外があります。
SQLExtendedFetch と SQLFetchScroll は、フェッチされた行数を返すためにさまざまなメソッドを使用します。 SQLExtendedFetch は、 *RowCountPtr; でフェッチされた行の数を返します SQLFetchScroll は、SQL_ATTR_ROWS_FETCHED_PTRが指すバッファーに直接フェッチされた行数を返します。 詳細については、 RowCountPtr 引数を参照してください。
SQLExtendedFetch および SQLFetchScroll は、異なる配列内の各行の状態を返します。 詳細については、 RowStatusArray 引数を参照してください。
SQLExtendedFetch と SQLFetchScroll 異なるメソッドを使用して、 FetchOrientation がSQL_FETCH_BOOKMARKされたときにブックマークを取得します。 SQLExtendedFetch では、可変長ブックマークや、ブックマークから 0 以外のオフセットで行セットをフェッチすることはできません。 詳細については、 FetchOffset 引数を参照してください。
SQLExtendedFetch と SQLFetchScroll では、さまざまな行セット サイズを使用します。 SQLExtendedFetch は SQL_ROWSET_SIZE ステートメント属性の値を使用し、 SQLFetchScroll は SQL_ATTR_ROW_ARRAY_SIZE ステートメント属性の値を使用します。
SQLExtendedFetch には、 SQLFetchScroll とは若干異なるエラー処理セマンティクスがあります。 詳細については、 SQLFetchScroll の「コメント」セクションの「エラー処理」を参照。
SQLExtendedFetch では、バインド オフセット (SQL_ATTR_ROW_BIND_OFFSET_PTR ステートメント属性) はサポートされていません。
SQLExtendedFetch への呼び出しは、SQLFetch または SQLFetchScroll の呼び出しと混在させることができず、フェッチ関数が呼び出される前に SQLBulkOperations が呼び出された場合、SQLExtendedFetch はカーソルを閉じて再度開くまで呼び出すことができません。 つまり、 SQLExtendedFetch はステートメント状態 S7 でのみ呼び出すことができます。 詳細については、「付録 B: ODBC 状態遷移テーブル」の「 状態遷移 」を参照してください。
ODBC 2*.x* ドライバーの使用中にアプリケーションが SQLFetchScroll を呼び出すと、ドライバー マネージャーはこの呼び出しを SQLExtendedFetch にマップします。 詳細については、「SQLFetchScroll および ODBC 2*.x* Drivers」を参照してください SQLFetchScroll。
ODBC 2*.x* では、複数の行をフェッチするために SQLExtendedFetch が呼び出され、1 つの行をフェッチするために
関連する関数
情報 | 参照トピック |
---|---|
結果セット内の列へのバッファーのバインド | SQLBindCol 関数 |
一括挿入、更新、または削除操作の実行 | SQLBulkOperations 関数 |
ステートメント処理の取り消し | SQLCancel 関数 |
結果セット内の列に関する情報を返す | SQLDescribeCol 関数 |
SQL ステートメントの実行 | SQLExecDirect 関数 |
準備された SQL ステートメントの実行 | SQLExecute 関数 |
結果セット列の数を返す | SQLNumResultCols 関数 |
カーソルの配置、行セット内のデータの更新、または結果セット内のデータの更新または削除 | SQLSetPos 関数 |
ステートメント属性の設定 | SQLSetStmtAttr 関数 |