適合 性
導入バージョン:ODBC 3.0 規格準拠:ISO 92
Summary
SQLGetDescRec は、ディスクリプタレコードの複数のフィールドの現在設定や値を返します。 返されるフィールドは、カラムやパラメータデータの名称、データ型、および格納場所を表しています。
構文
SQLRETURN SQLGetDescRec(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLCHAR * Name,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr,
SQLSMALLINT * TypePtr,
SQLSMALLINT * SubTypePtr,
SQLLEN * LengthPtr,
SQLSMALLINT * PrecisionPtr,
SQLSMALLINT * ScalePtr,
SQLSMALLINT * NullablePtr);
引数
DescriptorHandle
[入力]ディスクリプターハンドル。
RecNumber
[入力]アプリケーションが情報を求めるディスクリプタレコードを示します。 ディスクリプタレコードは1から番号付けされ、レコード番号0がブックマークレコードです。
RecNumberの引数はSQL_DESC_COUNTの値以下でなければなりません。
RecNumberがSQL_DESC_COUNT以下で行に列やパラメータのデータが含まれていない場合、SQLGetDescRecを呼び出しるとフィールドのデフォルト値を返します。 (詳細は SQLSetDescFieldの「ディスクリプタフィールドの初期化」を参照してください。)
氏名
[出力]ディスクリプタレコードのSQL_DESC_NAMEフィールドを返すためのバッファへのポインタです。
NameがNULLの場合、StringLengthPtr はNameが指すバッファ内で返せる文字数(文字データのnull終端文字を除く)を返します。
BufferLength
[入力]*名前 バッファの長さ(文字数)です。
StringLengthPtr
[出力]*Name バッファで返せるデータ文字数(null-termination文字を除く)を返すためのバッファへのポインタです。 文字数が BufferLength以上の場合、*Name のデータはnull終端文字の長さを引いた BufferLength に切り詰められ、ドライバによってnull終端処理されます。
タイププトル
[出力]ディスクリプタレコードのSQL_DESC_TYPEフィールドの値を返すためのバッファへのポインタです。
サブタイププトル
[出力]型がSQL_DATETIMEまたはSQL_INTERVALのレコードの場合、これはSQL_DESC_DATETIME_INTERVAL_CODEフィールドの値を返すためのバッファへのポインタです。
LengthPtr
[出力]ディスクリプタレコードのSQL_DESC_OCTET_LENGTHフィールドの値を返すバッファへのポインタです。
プレシジョンPtr
[出力]ディスクリプタレコードのSQL_DESC_PRECISIONフィールドの値を返すためのバッファへのポインタです。
ScalePtr
[出力]記述子レコードのSQL_DESC_SCALEフィールドの値を返すためのバッファへのポインタです。
NullablePtr
[出力]ディスクリプタレコードのSQL_DESC_NULLABLEフィールドの値を返すためのバッファへのポインタです。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_NO_DATA、SQL_INVALID_HANDLE。
RecNumberが現在のディスクリプタレコード数より多い場合、SQL_NO_DATAが返されます。
SQL_NO_DATAは、 DescriptorHandle がIRDハンドルで文が準備または実行状態にあるが、開いているカーソルがない場合に返されます。
Diagnostics
SQLGetDecRec がSQL_ERRORまたは SQL_SUCCESS_WITH_INFO を返す場合、SQLGetDiagRec を呼び出して HandleType を SQL_HANDLE_DESC と Handle を DescriptorHandle で呼び出すことで、関連する SQLSTATE 値を取得できます。 以下の表は 、通常SQLGetDescRec によって返されるSQLSTATE値を示し、それぞれをこの関数の文脈で説明しています。「(DM)」という表記は、ドライバーマネージャーが返すSQLstateの記述の前に記載されます。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。
| SQLSTATE | エラー | Description |
|---|---|---|
| 01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
| 01004 | 文字列データ、右切り捨て | バッファ*Name はディスクリプタフィールド全体を返すには十分大きさではありませんでした。 そのため、フィールドは短縮されました。 切り詰められていないディスクリプタフィールドの長さは*StringLengthPtrで返されます。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
| 07009 | 無効な記述子インデックス |
FieldIdentifierの引数はレコードフィールド、RecNumberの引数は0、DescriptorHandleの引数はIPDハンドルでした。 (DM) RecNumber の引数は0に設定され、SQL_ATTR_USE_BOOKMARKS文属性はSQL_UB_OFFに設定され、 DescriptorHandle の引数はIRDハンドルでした。 RecNumberの引数は0未満でした。 |
| 08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
| HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。 |
| HY001 | メモリ割り当てエラー | ドライバは、関数の実行や完了をサポートするために必要なメモリを割り当てることができませんでした。 |
| HY007 | 関連付けられたステートメントが準備されていません | DescriptorHandle はIRDに関連付けられており、対応する文ハンドルは準備済みまたは実行状態ではありませんでした。 |
| HY010 | 関数シーケンス エラー | (DM) DescriptorHandle は、非同期実行中の関数(この関数ではありません)が呼び出され、その関数が呼び出された時点でも実行中だった StatementHandle に関連付けられていました。 (DM) DescriptorHandleは、SQLExecute、SQLExecDirect、SQLBulkOperations、またはSQLSetPosを呼び出して返すStatementHandleに関連付けられていましたSQL_NEED_DATA。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 (DM) DescriptorHandleに関連付けられた接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は SQLGetDescRec が呼び出された時点でも実行中でした。 |
| HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
| HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
| HYT01 | 接続がタイムアウトしました | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
| IM001 | ドライバーは、この関数をサポートしていません | (DM) DescriptorHandle に関連付けられたドライバーはこの関数をサポートしていません。 |
Comments
アプリケーションは SQLGetDescRec を呼び出して、単一の列またはパラメータに対して以下のディスクリプタフィールドの値を取得できます。
SQL_DESC_NAME
SQL_DESC_TYPE
SQL_DESC_DATETIME_INTERVAL_CODE(タイプがSQL_DATETIMEまたはSQL_INTERVALのレコード用)
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION
SQL_DESC_SCALE
SQL_DESC_NULLABLE
SQLGetDescRec はヘッダーフィールドの値を取得しません。
アプリケーションは、フィールドに対応する引数をヌルポインタに設定することで、フィールドの設定の返還を防ぐことができます。
アプリケーションが特定の記述子タイプに対して未定義のフィールドの値を取得するために SQLGetDescRec を呼び出すと、関数はSQL_SUCCESSを返しますが、そのフィールドの値は未定義です。 例えば、APDやARDのSQL_DESC_NAMEまたはSQL_DESC_NULLABLEフィールドに対して SQLGetDescréc を呼び出すと、フィールドの値はSQL_SUCCESS返されますが、その値は定義されていません。
アプリケーションが SQLGetDescRec を呼び出して、特定のディスクリプタタイプで定義されているがデフォルト値がなく、まだ設定されていないフィールドの値を取得すると、関数はSQL_SUCCESSを返しますが、そのフィールドの値は未定義です。 詳細については、 SQLSetDescFieldの「ディスクリプタフィールドの初期化」をご覧ください。
フィールドの値は SQLGetDescFieldを呼び出しることで個別に取得することも可能です。 ディスクリプタヘッダーやレコード内のフィールドの説明については、 SQLSetDescFieldを参照してください。 記述子の詳細については、「記述子」を参照してください。
関連関数
| ~についての情報 | 参照先 |
|---|---|
| カラムの製本 | SQLBindCol 関数 |
| パラメータのバインド | SQLBindParameter 関数 |
| ディスクリプタフィールドの取得 | SQLGetDescField 関数 |
| 複数のディスクリプタフィールドを設定する | SQLSetDescRec 関数 |