SQLNumResultCols 関数

準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ISO 92

まとめ
SQLNumResultCols は、 結果セット内の列数を返します。

構文

  
SQLRETURN SQLNumResultCols(  
     SQLHSTMT        StatementHandle,  
     SQLSMALLINT *   ColumnCountPtr);  

引数

StatementHandle
[入力]ステートメント ハンドル。

ColumnCountPtr
[出力]結果セット内の列数を返すバッファーへのポインター。 この数には、バインドされたブックマーク列は含まれません。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

SQLNumResultCols がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、関連付けられている SQLSTATE 値を取得するには、SQL_HANDLE_STMTの HandleTypeStatementHandleHandle を指定して SQLGetDiagRec を呼び出します。 次の表に、 SQLNumResultCols によって一般的に返される SQLSTATE 値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERRORされます。

SQLSTATE エラー 説明
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
08S01 通信リンクエラー ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てることができませんでした。
HY008 操作が取り消されました StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandleStatementHandle で呼び出されました。その後、関数は StatementHandle で再度呼び出されました。

関数が呼び出され、実行が完了する前に、マルチスレッド アプリケーション内の別のスレッドから StatementHandleSQLCancel または SQLCancelHandle が呼び出されました。
HY010 関数シーケンス エラー (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLNumResultsCols 関数が呼び出されたときにまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirect、または SQLMoreResults が呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、ストリーミングされたすべてのパラメーターのデータが取得される前に呼び出されました。

(DM) 関数は、StatementHandle対して SQLPrepare または SQLExecDirect を呼び出す前に呼び出されました。

(DM) 非同期実行関数 (この関数ではなく) が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。

ステートメント ハンドルを解放できるタイミングの詳細については、「 SQLPrepare 関数 」を参照してください。
HY013 メモリ管理エラー メモリ不足の可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY117 不明なトランザクション状態が原因で接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に関連付けられているドライバーは、 関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルを使用するたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する以前の非同期操作を完了するために呼び出されていません。 ハンドルの前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、ハンドルで SQLCompleteAsync を呼び出す必要があります。

SQLNumResultCols は、 SQLPrepare の後と SQLExecute の前に呼び出されたときに SQLPrepare または SQLExecute によって返される任意の SQLSTATE を返すことができます。これは、データ ソースがステートメントに関連付けられている SQL ステートメントを評価するタイミングに応じて異なります。

説明

SQLNumResultCols は 、ステートメントが準備済み、実行済み、または位置指定状態の場合にのみ正常に呼び出すことができます。

StatementHandle に関連付けられているステートメントが列を返さない場合、SQLNumResultCols は *ColumnCountPtr を 0 に設定します。

SQLNumResultCols によって返される列の数は、IRD の SQL_DESC_COUNT フィールドと同じ値です。

詳細については、「 結果セットが作成されましたか? 」および「 メタデータの使用方法」を参照してください

対象 解決方法については、
結果セット内の列にバッファーをバインドする SQLBindCol 関数
ステートメント処理の取り消し SQLCancel 関数
結果セット内の列に関する情報を返す SQLColAttribute 関数
結果セット内の列に関する情報を返す SQLDescribeCol 関数
SQL ステートメントの実行 SQLExecDirect 関数
準備された SQL ステートメントの実行 SQLExecute 関数
データブロックのフェッチまたは結果セットのスクロール SQLFetchScroll 関数
1 つの行またはデータ ブロックを順方向にフェッチする SQLFetch 関数
データの列の一部またはすべてをフェッチする SQLGetData 関数
実行のための SQL ステートメントの準備 SQLPrepare 関数
カーソルスクロールオプションの設定 SQLSetStmtAttr 関数

参照

ODBC API リファレンス
ODBC ヘッダー ファイル