次の方法で共有


SQLSetDescRec 関数

準拠
導入されたバージョン: ODBC 3.0 標準コンプライアンス: ISO 92

の概要
SQLSetDescRec 関数は、列またはパラメーター データにバインドされたデータ型とバッファーに影響を与える複数の記述子フィールドを設定します。

構文

  
SQLRETURN SQLSetDescRec(  
      SQLHDESC      DescriptorHandle,  
      SQLSMALLINT   RecNumber,  
      SQLSMALLINT   Type,  
      SQLSMALLINT   SubType,  
      SQLLEN        Length,  
      SQLSMALLINT   Precision,  
      SQLSMALLINT   Scale,  
      SQLPOINTER    DataPtr,  
      SQLLEN *      StringLengthPtr,  
      SQLLEN *      IndicatorPtr);  

引数

DescriptorHandle
[入力]記述子ハンドル。 これは IRD ハンドルにすることはできません。

RecNumber
[入力]設定するフィールドを含む記述子レコードを示します。 記述子レコードには 0 から番号が付けられます。レコード番号 0 はブックマーク レコードです。 この引数は 0 以上である必要があります。 RecNumber SQL_DESC_COUNTの値より大きい場合は、RecNumberの値 変更SQL_DESC_COUNTis。

型の
[入力]記述子レコードのSQL_DESC_TYPE フィールドを設定する値。

SubType
[入力]型がSQL_DATETIMEまたはSQL_INTERVALレコードの場合、これはSQL_DESC_DATETIME_INTERVAL_CODEフィールドを設定する値です。

の長さの
[入力]記述子レコードのSQL_DESC_OCTET_LENGTH フィールドを設定する値。

精度
[入力]記述子レコードのSQL_DESC_PRECISION フィールドを設定する値。

スケール
[入力]記述子レコードのSQL_DESC_SCALE フィールドを設定する値。

DataPtr の
[遅延入力または出力]記述子レコードのSQL_DESC_DATA_PTR フィールドを設定する値。 DataPtr は null ポインターに設定できます。

DataPtr 引数を null ポインターに設定して、SQL_DESC_DATA_PTR フィールドを null ポインターに設定できます。 DescriptorHandle 引数のハンドルが ARD に関連付けられている場合、列のバインドが解除されます。

StringLengthPtr
[遅延入力または出力]記述子レコードのSQL_DESC_OCTET_LENGTH_PTR フィールドを設定する値。 StringLengthPtr を null ポインターに設定して、SQL_DESC_OCTET_LENGTH_PTR フィールドを null ポインターに設定できます。

IndicatorPtr
[遅延入力または出力]記述子レコードのSQL_DESC_INDICATOR_PTR フィールドを設定する値。 IndicatorPtr を null ポインターに設定して、SQL_DESC_INDICATOR_PTR フィールドを null ポインターに設定できます。

収益

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

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

SQLSTATE エラー 形容
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
07009 記述子インデックスが無効です RecNumber 引数は 0 に設定され、DescriptorHandle は IPD ハンドルを参照します。

RecNumber 引数が 0 未満でした。

RecNumber 引数は、データ ソースがサポートできる列またはパラメーターの最大数を超え、引数 DescriptorHandle は APD、IPD、または ARD でした。

RecNumber 引数は 0 に等しく、DescriptorHandle 引数は暗黙的に割り当てられた APD を参照します。 (このエラーは、明示的に割り当てられたアプリケーション記述子が実行時まで APD か ARD かがわからないため、明示的に割り当てられたアプリケーション記述子では発生しません)。
08S01 通信リンクエラー ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY010 関数シーケンス エラー (DM) DescriptorHandle は、非同期実行関数 (この関数ではなく) が呼び出され、この関数が呼び出されたときにまだ実行されていた StatementHandle に関連付けられていた。

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

(DM) 非同期実行関数が、DescriptorHandleに関連付けられている接続ハンドルに対して呼び出されました。 この非同期関数は、SQLSetDescRec 関数が呼び出されたときに、まだ実行されていました。

(DM) SQLExecuteSQLExecDirect、または SQLMoreResults が、DescriptorHandle に関連付けられているステートメント ハンドルの 1 つに対して呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY016 実装行記述子を変更できません DescriptorHandle 引数は IRD に関連付けられていた。
HY021 一貫性のない記述子情報 Type フィールド、または記述子のSQL_DESC_TYPE フィールドに関連付けられているその他のフィールドが無効または一貫性がありません。

整合性チェック中に確認された記述子情報に一貫性がありません。 (このセクションで後述する「整合性チェック」を参照してください)。
HY090 文字列またはバッファーの長さが無効です (DM) ドライバーは ODBC 2.x ドライバーで、記述子は ARD、ColumnNumber 引数は 0 に設定され、BufferLength 引数に指定された値は 4 に等しくありません。
HY117 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、SQLEndTran 関数を参照してください。
HYT01 接続タイムアウトの有効期限が切れた データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQLSetConnectAttr(SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) DescriptorHandle に関連付けられているドライバーは、関数をサポートしていません。

コメント

アプリケーション SQLSetDescRec を呼び出して、単一の列またはパラメーターに対して次のフィールドを設定できます。

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (型がSQL_DATETIMEまたはSQL_INTERVALのレコードの場合)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_DATA_PTR

  • SQL_DESC_OCTET_LENGTH_PTR

  • SQL_DESC_INDICATOR_PTR

手記

SQLSetDescRec の呼び出しが失敗した場合、RecNumber 引数によって識別される記述子レコードの内容は未定義になります。

列またはパラメーターをバインドする場合、SQLSetDescRec を使用すると、SQLBindCol を呼び出したり、SQLBindParameter したり、SQLSetDescField複数の呼び出しを行ったりすることなく、バインドに影響する複数のフィールドを変更できます。 SQLSetDescRec は、ステートメントに現在関連付けられていない記述子にフィールドを設定できます。 SQLBindParameter SQLSetDescRecよりも多くのフィールドを設定し、APD と IPD の両方のフィールドを 1 回の呼び出しで設定でき、記述子ハンドルは必要ありません。

手記

ブックマーク フィールドを設定するには、RecNumber 引数 0 を指定 SQLSetDescRec を呼び出す前に、ステートメント属性SQL_ATTR_USE_BOOKMARKSを常に設定する必要があります。 これは必須ではありませんが、強くお勧めします。

整合性チェック

整合性チェックは、アプリケーションが APD、ARD、または IPD のSQL_DESC_DATA_PTR フィールドを設定するたびに、ドライバーによって自動的に実行されます。 いずれかのフィールドが他のフィールドと矛盾している場合、SQLSetDescRec は SQLSTATE HY021 (一貫性のない記述子情報) を返します。

アプリケーションが APD、ARD、または IPD のSQL_DESC_DATA_PTR フィールドを設定するたびに、ドライバーは、SQL_DESC_TYPE フィールドの値とそのSQL_DESC_TYPEフィールドに適用できる値が有効で一貫性があることを確認します。 このチェックは、SQLBindParameter または SQLBindCol が呼び出されたとき、または APD、ARD、または IPD に対して SQLSetDescRec が呼び出されたときに常に実行されます。 この整合性チェックには、記述子フィールドに関する次のチェックが含まれます。

  • SQL_DESC_TYPEフィールドは、有効な ODBC C 型または SQL 型のいずれか、またはドライバー固有の SQL 型である必要があります。 SQL_DESC_CONCISE_TYPEフィールドは、有効な ODBC C 型または SQL 型のいずれか、またはドライバー固有の C 型または SQL 型 (簡潔な datetime 型や間隔型を含む) である必要があります。

  • SQL_DESC_TYPEレコードフィールドがSQL_DATETIMEまたはSQL_INTERVALの場合、SQL_DESC_DATETIME_INTERVAL_CODEフィールドは有効な日時コードまたは間隔コードのいずれかである必要があります。 (SQLSetDescFieldのSQL_DESC_DATETIME_INTERVAL_CODE フィールドの説明を参照してください)。

  • SQL_DESC_TYPE フィールドに数値型が示されている場合は、SQL_DESC_PRECISIONフィールドとSQL_DESC_SCALE フィールドが有効であることが確認されます。

  • SQL_DESC_CONCISE_TYPE フィールドが時刻またはタイムスタンプのデータ型、秒コンポーネントを持つ間隔の型、または時刻コンポーネントを持ついずれかの間隔データ型である場合、SQL_DESC_PRECISION フィールドは有効な秒の有効桁数であることが確認されます。

  • SQL_DESC_CONCISE_TYPEが間隔データ型の場合、SQL_DESC_DATETIME_INTERVAL_PRECISION フィールドは有効な間隔の先頭の有効桁数の値であることが確認されます。

IPD のSQL_DESC_DATA_PTR フィールドは通常設定されません。ただし、アプリケーションでこれを行って、IPD フィールドの整合性チェックを強制できます。 IRD に対して整合性チェックを実行することはできません。 IPD の SQL_DESC_DATA_PTR フィールドが設定されている値は、実際には格納されず、SQLGetDescField または SQLGetDescRec呼び出しによって取得することはできません。この設定は、整合性チェックを強制するためにのみ行われます。

詳細については、次の情報を参照してください。 見る
列のバインド SQLBindCol 関数 の
パラメーターのバインド SQLBindParameter 関数 の
1 つの記述子フィールドの取得 SQLGetDescField 関数 の
複数の記述子フィールドの取得 SQLGetDescRec 関数 の
単一記述子フィールドの設定 SQLSetDescField 関数 の

関連項目

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