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_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。
診断
SQLSTATE | エラー | 形容 |
---|---|---|
01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
07009 | 記述子インデックスが無効です |
RecNumber 引数は 0 に設定され、DescriptorHandle は IPD ハンドルを参照します。 RecNumber 引数が 0 未満でした。 RecNumber 引数は 0 に等しく、DescriptorHandle 引数は暗黙的に割り当てられた APD を参照します。 (このエラーは、明示的に割り当てられたアプリケーション記述子が実行時まで APD か ARD かがわからないため、明示的に割り当てられたアプリケーション記述子では発生しません)。 |
08S01 | 通信リンクエラー | ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。 |
HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。 |
HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
HY010 | 関数シーケンス エラー | (DM) DescriptorHandle は、非同期実行関数 (この関数ではなく) が呼び出され、この関数が呼び出されたときにまだ実行されていた StatementHandle に関連付けられていた。 (DM) SQLExecute、SQLExecDirect、SQLBulkOperations、または SQLSetPos は、DescriptorHandle が関連付けられてSQL_NEED_DATA返された StatementHandle に対して呼び出されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 (DM) 非同期実行関数が、DescriptorHandleに関連付けられている接続ハンドルに対して呼び出されました。 この非同期関数は、SQLSetDescRec 関数が呼び出されたときに、まだ実行されていました。 (DM) SQLExecute、SQLExecDirect、または SQLMoreResults が、DescriptorHandle に関連付けられているステートメント ハンドルの 1 つに対して呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 |
HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
HY016 | 実装行記述子を変更できません | DescriptorHandle 引数は IRD に関連付けられていた。 |
HY021 | 一貫性のない記述子情報 |
Type フィールド、または記述子のSQL_DESC_TYPE フィールドに関連付けられているその他のフィールドが無効または一貫性がありません。 整合性チェック中に確認された記述子情報に一貫性がありません。 (このセクションで後述する「整合性チェック」を参照してください)。 |
HY090 | 文字列またはバッファーの長さが無効です | (DM) ドライバーは ODBC |
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
手記
ブックマーク フィールドを設定するには、RecNumber 引数 0 を指定 SQLSetDescRec を呼び出す前に、ステートメント属性SQL_ATTR_USE_BOOKMARKSを常に設定する必要があります。 これは必須ではありませんが、強くお勧めします。
整合性チェック
整合性チェックは、アプリケーションが APD、ARD、または IPD のSQL_DESC_DATA_PTR フィールドを設定するたびに、ドライバーによって自動的に実行されます。 いずれかのフィールドが他のフィールドと矛盾している場合、SQLSetDescRec
アプリケーションが APD、ARD、または IPD のSQL_DESC_DATA_PTR フィールドを設定するたびに、ドライバーは、SQL_DESC_TYPE フィールドの値とそのSQL_DESC_TYPEフィールドに適用できる値が有効で一貫性があることを確認します。 このチェックは、SQLBindParameter
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 ヘッダー ファイル の