SQLSetStmtAttr 関数

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

まとめ
SQLSetStmtAttr は 、ステートメントに関連する属性を設定します。

Note

ODBC 3.x アプリケーションが ODBC 2.x ドライバーを操作している場合にドライバー マネージャーによってこの関数がマップされる内容の詳細については、「 アプリケーションの下位互換性のための置換関数のマッピング」を参照してください。

構文

  
SQLRETURN SQLSetStmtAttr(  
     SQLHSTMT      StatementHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

引数

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

属性
[入力][コメント] に表示される、設定するオプション。

ValuePtr
[入力] Attribute に関連付ける値。 Attribute の値に応じて、ValuePtr は次のいずれかになります。

  • ODBC 記述子ハンドル。

  • SQLUINTEGER 値。

  • SQLULEN 値。

  • 次のいずれかを指すポインター。

    • null で終わる文字列。

    • バイナリ バッファー。

    • SQLLEN、SQLULEN、または SQLUSMALLINT 型の値または配列。

    • ドライバー定義の値。

Attribute 引数がドライバー固有の値の場合、ValuePtr は符号付き整数である可能性があります。

StringLength
[入力] Attribute が ODBC 定義の属性で 、ValuePtr が文字列またはバイナリ バッファーを指している場合、この引数は *ValuePtr の長さである必要があります。 Attribute が ODBC 定義の属性で、ValuePtr が整数の場合、StringLength は無視されます。

Attribute がドライバー定義の属性の場合、アプリケーションは StringLength 引数を設定して、ドライバー マネージャーに属性の性質を示します。 StringLength には、次の値を指定できます。

  • ValuePtr が文字列へのポインターである場合、StringLength は文字列またはSQL_NTSの長さになります。

  • ValuePtr がバイナリ バッファーへのポインターである場合、アプリケーションは SQL_LEN_BINARY_ATTR(length) マクロの結果を StringLength に配置します。 これにより、 StringLength に負の値が配置されます。

  • ValuePtr が文字列またはバイナリ文字列以外の値へのポインターである場合、StringLength には値SQL_IS_POINTER必要があります。

  • ValuePtr に固定長値が含まれている場合、StringLength は必要に応じてSQL_IS_INTEGERまたはSQL_IS_UINTEGERのいずれかになります。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

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

SQLSTATE エラー 説明
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
01S02 オプション値が変更されました ドライバーは 、ValuePtr で指定された値をサポートしていません。または、実装の作業条件が原因で ValuePtr で指定された値が無効であったため、ドライバーは同様の値を置き換えました。 (SQLGetStmtAttr を呼び出して、一時的に置換された値を決定できます)。置き換え値は、カーソルが閉じられるまで StatementHandle に対して有効であり、その時点でステートメント属性は前の値に戻ります。 変更できるステートメント属性は次のとおりです。

SQL_ ATTR_CONCURRENCY SQL_ ATTR_CURSOR_TYPE SQL_ ATTR_KEYSET_SIZE SQL_ ATTR_MAX_LENGTH SQL_ ATTR_MAX_ROWS SQL_ ATTR_QUERY_TIMEOUT SQL_ATTR_ROW_ARRAY_SIZE SQL_ ATTR_SIMULATE_CURSOR

(関数はSQL_SUCCESS_WITH_INFOを返します。
08S01 通信リンクエラー ドライバーとドライバーが接続されているデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。
24000 カーソル状態が無効 属性がSQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_TYPE、SQL_ATTR_SIMULATE_CURSOR、またはSQL_ATTR_USE_BOOKMARKSで、カーソルが開かれていました。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てることができませんでした。
HY009 null ポインターの使用が無効です Attribute 引数は文字列属性を必要とするステートメント属性を識別し、ValuePtr 引数は null ポインターでした。
HY010 関数シーケンス エラー (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLSetStmtAttr 関数が呼び出されたときにも実行されていました。

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

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

(DM) StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY011 属性を今すぐ設定できません Attribute がSQL_ATTR_CONCURRENCY、SQL_ ATTR_CURSOR_TYPE、SQL_ ATTR_SIMULATE_CURSOR、またはSQL_ ATTR_USE_BOOKMARKSであり、ステートメントが準備されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY017 自動的に割り当てられた記述子ハンドルの使用が無効です (DM) Attribute 引数がSQL_ATTR_IMP_ROW_DESCまたはSQL_ATTR_IMP_PARAM_DESCされました。

(DM) Attribute 引数はSQL_ATTR_APP_ROW_DESCまたはSQL_ATTR_APP_PARAM_DESCであり、 ValuePtr の値は、最初に ARD または APD に割り当てられたハンドル以外の暗黙的に割り当てられた記述子ハンドルでした。
HY024 属性値が無効です 指定した 属性値 を指定すると、 ValuePtr で無効な値が指定されました。 (ドライバー マネージャーは、SQL_ATTR_ACCESS_MODEやSQL_ ATTR_ASYNC_ENABLEなどの個別の値セットを受け入れる接続属性とステートメント属性に対してのみ、この SQLSTATE を返します。その他のすべての接続属性とステートメント属性について、ドライバーは ValuePtr で指定された値を確認する必要があります)。

Attribute 引数はSQL_ATTR_APP_ROW_DESCまたはSQL_ATTR_APP_PARAM_DESCであり、ValuePtrStatementHandle 引数と同じ接続上にない明示的に割り当てられた記述子ハンドルでした。
HY090 文字列またはバッファーの長さが無効です (DM) *ValuePtr は文字列であり、 StringLength 引数は 0 未満ですが、SQL_NTSされませんでした。
HY092 無効な属性/オプション識別子 (DM) 引数 Attribute に指定された値が、ドライバーでサポートされている ODBC のバージョンに対して無効でした。

(DM) 引数 Attribute に指定された値が読み取り専用属性でした。
HY117 不明なトランザクション状態が原因で接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。
HYC00 省略可能な機能が実装されていません 引数 Attribute に指定された値は、ドライバーでサポートされている ODBC のバージョンに対して有効な ODBC ステートメント属性でしたが、ドライバーではサポートされていませんでした。

Attribute 引数がSQL_ATTR_ASYNC_ENABLEされ、InfoType が SQL_ASYNC_MODE の SQLGetInfo を呼び出すと、SQL_AM_CONNECTIONが返されます。

Attribute 引数がSQL_ATTR_ENABLE_AUTO_IPDされ、接続属性SQL_ATTR_AUTO_IPDの値がSQL_FALSEされました。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に関連付けられているドライバーは、 関数をサポートしていません。
S1118 ドライバーは非同期通知をサポートしていません SQLSetStmtAttr を呼び出してSQL_ATTR_ASYNC_STMT_EVENTを設定する場合。非同期通知は、ドライバーではサポートされていません。

説明

ステートメントのステートメント属性は、 SQLSetStmtAttr の別の呼び出しによって変更されるまで、または SQLFreeHandle を呼び出してステートメントが削除されるまで有効です。 SQL_CLOSE、SQL_UNBIND、または SQL_RESET_PARAMS オプションを使用して SQLFreeStmt を呼び出しても、ステートメント属性はリセットされません。

一部のステートメント属性は、データ ソースが ValuePtr で指定された値をサポートしていない場合に、同様の値の置換をサポートします。 このような場合、ドライバーは SQL_SUCCESS_WITH_INFO と SQLSTATE 01S02 を返します (オプション値が変更されました)。 たとえば、 Attribute がSQL_ATTR_CONCURRENCYで ValuePtr がSQL_CONCUR_ROWVERされている場合、データ ソースでこれをサポートしていない場合、ドライバーは SQL_CONCUR_VALUES に置き換え、SQL_SUCCESS_WITH_INFOを返します。 置き換えた値を特定するために、アプリケーションは SQLGetStmtAttr を呼び出します。

ValuePtr で設定される情報の形式は、指定された属性によって異なります。 SQLSetStmtAttr は、2 つの異なる形式 (文字列または整数値) のいずれかで属性情報を受け入れます。 それぞれの形式は、属性の説明に記載されています。 この形式は、 SQLGetStmtAttr の各属性に対して返される情報に適用されます。 SQLSetStmtAttrValuePtr 引数が指す文字列の長さは StringLength です

Note

SQLSetConnectAttr を呼び出して接続レベルでステートメント属性を設定する機能は、ODBC 3.x では非推奨となりました。 ODBC 3.x アプリケーションでは、ステートメント属性を接続レベルで設定しないでください。 ODBC 3.x ステートメント属性は、接続レベルでは設定できません。接続属性とステートメント属性の両方であるSQL_ATTR_METADATA_ID属性とSQL_ATTR_ASYNC_ENABLE属性を除き、接続レベルまたはステートメント レベルで設定できます。

Note

ODBC 3.x ドライバーは、接続レベルで ODBC 2.x ステートメント オプションを設定する ODBC 2.x アプリケーションで動作する必要がある場合にのみ、この機能をサポートする必要があります。 詳細については、「付録 G: 下位互換性のためのドライバー ガイドライン」の 「SQLSetConnectOption マッピング 」の「接続レベルでのステートメント オプションの設定」を参照してください。

記述子フィールドを設定するステートメント属性

多くのステートメント属性は、記述子のヘッダー フィールドに対応しています。 これらの属性を設定すると、実際には記述子フィールドが設定されます。 SQLSetDescField ではなく SQLSetStmtAttr の呼び出しによってフィールドを設定すると、関数呼び出しで記述子ハンドルを取得する必要がないという利点があります。

注意事項

1 つのステートメントに対して SQLSetStmtAttr を呼び出すと、他のステートメントに影響する可能性があります。 これは、ステートメントに関連付けられている APD または ARD が明示的に割り当てられ、他のステートメントにも関連付けられている場合に発生します。 SQLSetStmtAttr は APD または ARD を変更するため、この記述子が関連付けられているすべてのステートメントに変更が適用されます。 これが必要な動作でない場合、アプリケーションは SQLSetStmtAttr を再度呼び出す前に、他のステートメント ( SQLSetStmtAttr を呼び出してSQL_ATTR_APP_ROW_DESCまたは SQL_ATTR_APP_PARAM_DESC フィールドを別の記述子ハンドルに設定) からこの記述子 関連付けを解除する必要があります。

対応するステートメント属性が設定された結果として記述子フィールドが設定されている場合、このフィールドは StatementHandle 引数によって識別されるステートメントに現在関連付けられている該当する記述子に対してのみ設定され、属性設定は将来そのステートメントに関連付けられる記述子には影響しません。 ステートメント属性でもある記述子フィールドが SQLSetDescField の呼び出しによって設定されると、対応するステートメント属性が設定されます。 明示的に割り当てられた記述子がステートメントから関連付け解除された場合、ヘッダー フィールドに対応するステートメント属性は、暗黙的に割り当てられた記述子のフィールドの値に戻ります。

ステートメントが割り当てられると ( SQLAllocHandle を参照)、4 つの記述子ハンドルが自動的に割り当てられ、 ステートメントに関連付けられます。 明示的に割り当てられた記述子ハンドルは、 sqlAllocHandlefHandleType の SQL_HANDLE_DESCで呼び出して記述子ハンドルを割り当て、 次に SQLSetStmtAttr を呼び出して記述子ハンドルを ステートメントに関連付けることで、 ステートメントに関連付けることができます。

次の表のステートメント属性は、記述子ヘッダー フィールドに対応しています。

Statement 属性 ヘッダー フィールド Desc。
SQL_ATTR_PARAM_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR APD
SQL_ATTR_PARAM_BIND_TYPE SQL_DESC_BIND_TYPE APD
SQL_ATTR_PARAM_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR APD
SQL_ATTR_PARAM_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IPD
SQL_ATTR_PARAMS_PROCESSED_PTR SQL_DESC_ROWS_PROCESSED_PTR IPD
SQL_ATTR_PARAMSET_SIZE SQL_DESC_ARRAY_SIZE APD
SQL_ATTR_ROW_ARRAY_SIZE SQL_DESC_ARRAY_SIZE Ard
SQL_ATTR_ROW_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR Ard
SQL_ATTR_ROW_BIND_TYPE SQL_DESC_BIND_TYPE Ard
SQL_ATTR_ROW_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR Ard
SQL_ATTR_ROW_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR Ird
SQL_ATTR_ROWS_FETCHED_PTR SQL_DESC_ROWS_PROCESSED_PTR Ird

ステートメント属性

現在定義されている属性と、その属性が導入された ODBC のバージョンを次の表に示します。さまざまなデータ ソースを利用するために、ドライバーによってより多くの属性が定義されることが予想されます。 属性の範囲は ODBC によって予約されています。ドライバー開発者は、オープン グループから独自のドライバー固有の使用のために値を予約する必要があります。 詳細については、「 ドライバー固有のデータ型、記述子の種類、情報の種類、診断の種類、および属性」を参照してください。

属性 ValuePtr の内容
SQL_ATTR_APP_PARAM_DESC (ODBC 3.0) ステートメント ハンドルの SQLExecute および SQLExecDirect の後続の呼び出しに対する APD へのハンドル。 この属性の初期値は、ステートメントが最初に割り当てられたときに暗黙的に割り当てられた記述子です。 この属性の値が SQL_NULL_DESC に設定されているか、最初に記述子に割り当てられたハンドルに設定されている場合、ステートメント ハンドルに以前に関連付けられていた明示的に割り当てられた APD ハンドルは関連付け解除され、ステートメント ハンドルは暗黙的に割り当てられた APD ハンドルに戻ります。

この属性は、別のステートメントに対して暗黙的に割り当てられた記述子ハンドル、または同じステートメントに暗黙的に設定された別の記述子ハンドルに設定することはできません。暗黙的に割り当てられた記述子ハンドルは、複数のステートメントまたは記述子ハンドルに関連付けることはできません。
SQL_ATTR_APP_ROW_DESC (ODBC 3.0) ステートメント ハンドルの後続のフェッチに対する ARD へのハンドル。 この属性の初期値は、ステートメントが最初に割り当てられたときに暗黙的に割り当てられた記述子です。 この属性の値が SQL_NULL_DESC に設定されているか、最初に記述子に割り当てられたハンドルに設定されている場合、ステートメント ハンドルに以前に関連付けられていた明示的に割り当てられた ARD ハンドルは関連付け解除され、ステートメント ハンドルは暗黙的に割り当てられた ARD ハンドルに戻ります。

この属性は、別のステートメントに対して暗黙的に割り当てられた記述子ハンドル、または同じステートメントに暗黙的に設定された別の記述子ハンドルに設定することはできません。暗黙的に割り当てられた記述子ハンドルは、複数のステートメントまたは記述子ハンドルに関連付けることはできません。
SQL_ATTR_ASYNC_ENABLE (ODBC 1.0) 指定したステートメントで呼び出された関数を非同期に実行するかどうかを指定する SQLULEN 値。

SQL_ASYNC_ENABLE_OFF = ステートメント レベルの非同期実行のサポートを無効にします (既定値)。

SQL_ASYNC_ENABLE_ON = ステートメント レベルの非同期実行のサポートを有効にします。

詳細については、「 非同期実行 (ポーリング メソッド)」を参照してください。

ステートメント レベルの非同期実行をサポートするドライバーの場合、ステートメント属性SQL_ATTR_ASYNC_ENABLEは読み取り専用です。 その値は、ステートメント ハンドルが割り当てられた時点で同じ名前の接続レベル属性の値と同じです。

sqlSetStmtAttr を呼び出して、SQL_ASYNC_MODE InfoType から SQLSTATE HYC00 が返SQL_AM_CONNECTION場合にSQL_ATTR_ASYNC_ENABLEを設定します (省略可能な機能は実装されていません)。 詳細については、「 SQLSetConnectAttr 関数 」を参照してください。
SQL_ATTR_ASYNC_STMT_EVENT (ODBC 3.8) イベント ハンドルである SQLPOINTER 値。

非同期関数の完了の通知は、 SQLSetStmtAttr を呼び出して SQL_ATTR_ASYNC_STMT_EVENT 属性を設定し、イベント ハンドルを指定することで有効になります。
SQL_ATTR_ASYNC_STMT_PCALLBACK (ODBC 3.8) 非同期コールバック関数への SQLPOINTER。

ドライバー マネージャーのみが、この属性を使用してドライバーの SQLSetStmtAttr 関数を呼び出すことができます。
SQL_ATTR_ASYNC_STMT_PCONTEXT (ODBC 3.8) コンテキスト構造への SQLPOINTER

ドライバー マネージャーのみが、この属性を使用してドライバーの SQLSetStmtAttr 関数を呼び出すことができます。
SQL_ATTR_CONCURRENCY (ODBC 2.0) カーソルのコンカレンシーを指定する SQLULEN 値。

SQL_CONCUR_READ_ONLY = Cursor は読み取り専用です。 更新は許可されません。

SQL_CONCUR_LOCK = カーソルは、行を確実に更新できるように、ロックの最低レベルを使用します。

SQL_CONCUR_ROWVER = Cursor はオプティミスティック コンカレンシー 制御を使用し、SQLBase ROWID や Sybase TIMESTAMP などの行バージョンを比較します。

SQL_CONCUR_VALUES = Cursor はオプティミスティック コンカレンシー制御を使用し、値を比較します。

SQL_ATTR_CONCURRENCYの既定値はSQL_CONCUR_READ_ONLYです。

この属性は、開いているカーソルには指定できません。 詳細については、「 コンカレンシーの種類」を参照してください。

SQL_ATTR_CURSOR_TYPE 属性 が、SQL_ATTR_CONCURRENCYの現在の値をサポートしていない型に変更された場合、SQL_ATTR_CONCURRENCYの値は実行時に変更され、 SQLExecDirect または SQLPrepare が呼び出されたときに警告が発行されます。

ドライバーが SELECT FOR UPDATE ステートメントをサポートしていて、SQL_ATTR_CONCURRENCY の値が SQL_CONCUR_READ_ONLY に設定されている間にこのようなステートメントが実行された場合は、エラーが返されます。 SQL_ATTR_CONCURRENCYの値が、SQL_ATTR_CURSOR_TYPEの現在の値ではなく、SQL_ATTR_CURSOR_TYPEの一部の値に対してドライバーがサポートする値に変更された場合、SQL_ATTR_CURSOR_TYPEの値は実行時に変更され、 SQLExecDirect または SQLPrepare が呼び出されたときに SQLSTATE 01S02 (オプション値が変更されました) が発行されます。

指定したコンカレンシーがデータ ソースでサポートされていない場合、ドライバーは別のコンカレンシーを置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。 SQL_CONCUR_VALUESの場合、ドライバーはSQL_CONCUR_ROWVERを置き換えます。その逆も同様です。 SQL_CONCUR_LOCKの場合、ドライバーは順番に、SQL_CONCUR_ROWVERまたはSQL_CONCUR_VALUESを置き換える。 置換された値の有効性は、実行時間までチェックされません。

SQL_ATTR_CONCURRENCYとその他のカーソル属性の間のリレーションシップの詳細については、「 カーソルの特性」および「カーソルの種類」を参照してください。
SQL_ATTR_CURSOR_SCROLLABLE (ODBC 3.0) アプリケーションが必要とするサポートのレベルを指定する SQLULEN 値。 この属性を設定すると、以降の SQLExecDirect および SQLExecute の呼び出しに影響します。

SQL_NONSCROLLABLE = スクロール可能なカーソルは、ステートメント ハンドルでは必要ありません。 アプリケーションがこのハンドルで SQLFetchScroll を呼び出す場合、 FetchOrientation の有効な値はSQL_FETCH_NEXTのみです。 既定値です。

SQL_SCROLLABLE = ステートメント ハンドルにはスクロール可能なカーソルが必要です。 SQLFetchScroll を呼び出すとき、アプリケーションは FetchOrientation の有効な値を指定して、シーケンシャル モード以外のモードでカーソル位置を設定できます。

スクロール可能なカーソルの詳細については、「 スクロール可能なカーソル」を参照してください。 SQL_ATTR_CURSOR_SCROLLABLEとその他のカーソル属性との関係の詳細については、「カーソルの特性」および「カーソルの種類」を参照してください。
SQL_ATTR_CURSOR_SENSITIVITY (ODBC 3.0) ステートメント ハンドル上のカーソルが、別のカーソルによって結果セットに加えられた変更を表示するかどうかを指定する SQLULEN 値。 この属性を設定すると、以降の SQLExecDirect および SQLExecute の呼び出しに影響します。 アプリケーションは、この属性の値を読み取り戻して、アプリケーションによって最後に設定された初期状態またはその状態を取得できます。

SQL_UNSPECIFIED = カーソルの種類と、ステートメント ハンドル上のカーソルが別のカーソルによって結果セットに加えられた変更を表示するかどうかは指定されていません。 ステートメント ハンドルにカーソルを置くと、このような変更は表示されないか、一部またはすべて表示されない場合があります。 既定値です。

SQL_INSENSITIVE = ステートメント ハンドル上のすべてのカーソルは、他のカーソルによる変更を反映せずに結果セットを表示します。 非依存カーソルは読み取り専用です。 これは、読み取り専用のコンカレンシーを持つ静的カーソルに対応します。

SQL_SENSITIVE = ステートメント ハンドル上のすべてのカーソルは、別のカーソルによって結果セットに加えられたすべての変更を表示します。

SQL_ATTR_CURSOR_SENSITIVITYとその他のカーソル属性との関係の詳細については、「 カーソルの特性」および「カーソルの種類」を参照してください。
SQL_ATTR_CURSOR_TYPE (ODBC 2.0) カーソルの種類を指定する SQLULEN 値。

SQL_CURSOR_FORWARD_ONLY = カーソルは前方にのみスクロールします。

SQL_CURSOR_STATIC = 結果セット内のデータは静的です。

SQL_CURSOR_KEYSET_DRIVEN = ドライバーは、SQL_ATTR_KEYSET_SIZE ステートメント属性で指定された行数のキーを保存して使用します。

SQL_CURSOR_DYNAMIC = ドライバーは、行セット内の行のキーのみを保存して使用します。

既定値は SQL_CURSOR_FORWARD_ONLY です。 この属性は、SQL ステートメントの準備後に指定できません。

指定したカーソルの種類がデータ ソースでサポートされていない場合、ドライバーは別のカーソルの種類を置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。 混合カーソルまたは動的カーソルの場合、ドライバーはキーセットドリブンカーソルまたは静的カーソルを順番に置き換える。 キーセット ドリブン カーソルの場合、ドライバーは静的カーソルを置き換える。

スクロール可能なカーソルの種類の詳細については、「 スクロール可能なカーソルの種類」を参照してください。 SQL_ATTR_CURSOR_TYPEとその他のカーソル属性との関係の詳細については、「 カーソルの特性」および「カーソルの種類」を参照してください。
SQL_ATTR_ENABLE_AUTO_IPD (ODBC 3.0) IPD の自動作成を実行するかどうかを指定する SQLULEN 値。

SQL_TRUE = SQLPrepare の呼び出し後に IPD の自動作成を有効にします。 SQL_FALSE = SQLPrepare の呼び出し後に IPD の自動作成をオフにします。 (サポートされている場合、アプリケーションは SQLDescribeParam を呼び出すことによって IPD フィールド情報を取得できます)。ステートメント属性SQL_ATTR_ENABLE_AUTO_IPDの既定値はSQL_FALSE。 詳細については、「 IPD の自動作成」を参照してください。
SQL_ATTR_FETCH_BOOKMARK_PTR (ODBC 3.0) バイナリ ブックマーク値を指す SQLLEN *。 fFetchOrientation がSQL_FETCH_BOOKMARKと等しい SQLFetchScroll を呼び出すと、ドライバーはこのフィールドからブックマーク値を取得します。 このフィールドの既定値は null ポインターです。 詳細については、「 ブックマークによるスクロール」を参照してください。

このフィールドが指す値は、行セット バッファーにキャッシュされたブックマークを使用する SQLBulkOperations のブックマークによる削除、ブックマークによる更新、ブックマーク操作によるフェッチには使用されません。
SQL_ATTR_IMP_PARAM_DESC (ODBC 3.0) IPD へのハンドル。 この属性の値は、 ステートメントが最初に割り当てられたときに割り当てられた記述子です。 アプリケーションでこの属性を設定することはできません。

この属性は、 SQLGetStmtAttr の呼び出しによって取得できますが、 SQLSetStmtAttr の呼び出しでは設定できません。
SQL_ATTR_IMP_ROW_DESC (ODBC 3.0) IRD へのハンドル。 この属性の値は、 ステートメントが最初に割り当てられたときに割り当てられた記述子です。 アプリケーションでこの属性を設定することはできません。

この属性は、 SQLGetStmtAttr の呼び出しによって取得できますが、 SQLSetStmtAttr の呼び出しでは設定できません。
SQL_ATTR_KEYSET_SIZE (ODBC 2.0) キーセットドリブン カーソルのキーセット内の行数を指定する SQLULEN。 キーセット サイズが 0 (既定値) の場合、カーソルは完全にキーセットドリブンです。 キーセットのサイズが 0 より大きい場合、カーソルは混合されます (キーセット内のキーセットドリブンと、キーセット外の動的)。 既定のキーセット サイズは 0 です。 キーセット ドリブン カーソルの詳細については、「 Keyset ドリブン カーソル」を参照してください。

指定したサイズがキーセットの最大サイズを超えた場合、ドライバーはそのサイズを置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。

SQLFetch または SQLFetchScroll は、キーセットのサイズが 0 より大きく、行セット サイズより小さい場合にエラーを返します。
SQL_ATTR_MAX_LENGTH (ODBC 1.0) ドライバーが文字またはバイナリ列から返すデータの最大量を指定する SQLULEN 値。 ValuePtr が使用可能なデータの長さより小さい場合、SQLFetch または SQLGetData はデータを切り捨てて、SQL_SUCCESSを返します。 ValuePtr が 0 (既定値) の場合、ドライバーは使用可能なすべてのデータを返そうとします。

指定した長さが、データ ソースが返すことができるデータの最小量より小さいか、データ ソースが返すことができるデータの最大量より大きい場合、ドライバーはその値を置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。

この属性の値は、開いているカーソルに設定できます。ただし、この設定はすぐには有効でない場合があります。この場合、ドライバーは SQLSTATE 01S02 (オプション値の変更) を返し、属性を元の値にリセットします。

この属性はネットワーク トラフィックを減らすことを目的としており、複数層ドライバーのデータ ソース (ドライバーではなく) がそれを実装できる場合にのみサポートする必要があります。 このメカニズムは、アプリケーションがデータを切り捨てるのに使用しないでください。受信したデータを切り捨てるには、アプリケーションで SQLBindCol または SQLGetDataBufferLength 引数に最大バッファー長を指定する必要があります。
SQL_ATTR_MAX_ROWS (ODBC 1.0) SELECT ステートメントのアプリケーションに返される最大行数に対応する SQLULEN 値。 *ValuePtr が 0 (既定値) の場合、ドライバーはすべての行を返します。

この属性は、ネットワーク トラフィックを減らすことを目的としています。 概念的には、結果セットの作成時に適用され、結果セットは最初の ValuePtr 行に制限されます。 結果セット内の行数が ValuePtr より大きい場合、結果セットは切り捨てられます。

SQL_ATTR_MAX_ROWSは、カタログ関数によって返されるものも含め、 ステートメントのすべての結果セットに適用されます。 SQL_ATTR_MAX_ROWSカーソル行数の最大値を設定します。

ドライバーは、SQL_ATTR_MAX_ROWSが正しく実装されることを保証できない場合、 SQLFetch または SQLFetchScroll のSQL_ATTR_MAX_ROWS動作をエミュレートしないでください (結果セットのサイズ制限をデータ ソースで実装できない場合)。

SQL_ATTR_MAX_ROWSが SELECT ステートメント以外のステートメント (カタログ関数など) に適用されるかどうかは、ドライバーによって定義されます。

この属性の値は、開いているカーソルに設定できます。ただし、この設定はすぐには有効でない場合があります。この場合、ドライバーは SQLSTATE 01S02 (オプション値の変更) を返し、属性を元の値にリセットします。
SQL_ATTR_METADATA_ID (ODBC 3.0) カタログ関数の文字列引数の処理方法を決定する SQLULEN 値。

SQL_TRUE場合、カタログ関数の文字列引数は識別子として扱われます。 このケースは重要ではありません。 削除されていない文字列の場合、ドライバーは末尾のスペースを削除し、文字列は大文字に折りたたまれます。 区切られた文字列の場合、ドライバーは先頭または末尾のスペースを削除し、区切り記号の間にあるものをリテラルで受け取ります。 これらの引数のいずれかが null ポインターに設定されている場合、関数は SQL_ERROR と SQLSTATE HY009 を返します (null ポインターの使用が無効です)。

SQL_FALSE場合、カタログ関数の文字列引数は識別子として扱われません。 このケースは重要です。 引数に応じて、文字列検索パターンを含めることができます。

既定値は SQL_FALSE です。

値のリストを受け取る SQLTablesTableType 引数は、この属性の影響を受けられません。

SQL_ATTR_METADATA_IDは、接続レベルで設定することもできます。 (また、SQL_ATTR_ASYNC_ENABLE は、接続属性でもある唯一のステートメント属性です)。

詳細については、「 カタログ関数の引数」を参照してください。
SQL_ATTR_NOSCAN (ODBC 1.0) ドライバーが SQL 文字列でエスケープ シーケンスをスキャンする必要があるかどうかを示す SQLULEN 値。

SQL_NOSCAN_OFF = ドライバーは、エスケープ シーケンス (既定値) の SQL 文字列をスキャンします。

SQL_NOSCAN_ON = ドライバーは SQL 文字列のエスケープ シーケンスをスキャンしません。 代わりに、ドライバーはステートメントをデータ ソースに直接送信します。

詳細については、「 ODBC でのエスケープ シーケンス」を参照してください。
SQL_ATTR_PARAM_BIND_OFFSET_PTR (ODBC 3.0) 動的パラメーターのバインドを変更するためにポインターに追加されたオフセットを指す SQLULEN * 値。 このフィールドが null 以外の場合、ドライバーはポインターを逆参照し、記述子レコード (SQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR、SQL_DESC_OCTET_LENGTH_PTR) 内の各遅延フィールドに逆参照された値を追加し、バインド時に新しいポインター値を使用します。 既定では null に設定されています。

バインド オフセットは常に、SQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR、および SQL_DESC_OCTET_LENGTH_PTR フィールドに直接追加されます。 オフセットが別の値に変更された場合でも、新しい値は記述子フィールドの値に直接追加されます。 新しいオフセットは、フィールド値とそれ以前のオフセットには追加されません。

詳細については、「 パラメーター バインド オフセット」を参照してください。

このステートメント属性を設定すると、APD ヘッダーの SQL_DESC_BIND_OFFSET_PTR フィールドが設定されます。
SQL_ATTR_PARAM_BIND_TYPE (ODBC 3.0) 動的パラメーターに使用するバインドの向きを示す SQLULEN 値。

このフィールドはSQL_PARAM_BIND_BY_COLUMN (既定値) に設定され、列方向のバインドを選択します。

行方向バインドを選択するために、このフィールドは、一連の動的パラメーターにバインドされる構造体またはバッファーのインスタンスの長さに設定されます。 この長さは、バインドされたすべてのパラメーターのスペースと構造体またはバッファーのパディングを含める必要があります。これにより、バインドされたパラメーターのアドレスが指定した長さでインクリメントされると、結果は次のパラメーター セット内の同じパラメーターの先頭を指すようにします。 ANSI C で sizeof 演算子を使用する場合、この動作は保証されます。

詳細については、「 パラメーターの配列のバインド」を参照してください。

このステートメント属性を設定すると、APD ヘッダーの SQL_DESC_ BIND_TYPE フィールドが設定されます。
SQL_ATTR_PARAM_OPERATION_PTR (ODBC 3.0) SQL ステートメントの実行中にパラメーターを無視するために使用される SQLUSMALLINT 値の配列を指す SQLUSMALLINT * 値。 各値は、SQL_PARAM_PROCEED (パラメーターを実行する場合) またはSQL_PARAM_IGNORE (パラメーターを無視する場合) のいずれかに設定されます。

APD の SQL_DESC_ARRAY_STATUS_PTR が指す配列の状態値を SQL_PARAM_IGNORE に設定することで、処理中にパラメーターのセットを無視できます。 状態値が SQL_PARAM_PROCEED に設定されている場合、または配列内の要素が設定されていない場合は、パラメーターのセットが処理されます。

このステートメント属性は null ポインターに設定できます。この場合、ドライバーはパラメーターの状態値を返しません。 この属性はいつでも設定できますが、新しい値は、次回 SQLExecDirect または SQLExecute が呼び出されるまで使用されません。

バインドされたパラメーターがない場合、この属性は無視されます。

詳細については、「 パラメーターの配列の使用」を参照してください。

このステートメント属性を設定すると、APD ヘッダーの SQL_DESC_ARRAY_STATUS_PTR フィールドが設定されます。
SQL_ATTR_PARAM_STATUS_PTR (ODBC 3.0) SQLExecute または SQLExecDirect の呼び出し後にパラメーター値の各行の状態情報を含む SQLUSMALLINT 値の配列を指す SQLUSMALLINT * 値。 このフィールドは、PARAMSET_SIZEが 1 より大きい場合にのみ必要です。

状態の値には、次の値を含めることができます。

SQL_PARAM_SUCCESS: この一連のパラメーターに対して SQL ステートメントが正常に実行されました。

SQL_PARAM_SUCCESS_WITH_INFO: この一連のパラメーターに対して SQL ステートメントが正常に実行されました。ただし、警告情報は診断データ構造で使用できます。

SQL_PARAM_ERROR: この一連のパラメーターの処理中にエラーが発生しました。 追加のエラー情報は、診断データ構造で入手できます。

SQL_PARAM_UNUSED: このパラメーター セットは使用されていませんでした。これは、以前のパラメーター セットが原因で、追加の処理を中止するエラーが発生した、またはSQL_ATTR_PARAM_OPERATION_PTRで指定された配列内のパラメーターセットに対してSQL_PARAM_IGNOREが設定されたことが原因である可能性があります。

SQL_PARAM_DIAG_UNAVAILABLE: ドライバーはパラメーターの配列をモノリシック単位として扱うので、このレベルのエラー情報は生成されません。

このステートメント属性は null ポインターに設定できます。この場合、ドライバーはパラメーターの状態値を返しません。 この属性はいつでも設定できますが、新しい値は、次回 SQLExecute または SQLExecDirect が呼び出されるまで使用されません。 この属性を設定すると、ドライバーによって実装される出力パラメーターの動作に影響を与える可能性があることに注意してください。

詳細については、「 パラメーターの配列の使用」を参照してください。

このステートメント属性を設定すると、IPD ヘッダーの SQL_DESC_ARRAY_STATUS_PTR フィールドが設定されます。
SQL_ATTR_PARAMS_PROCESSED_PTR (ODBC 3.0) エラー・セットを含め、処理されたパラメーターのセットの数を返すバッファーを指す SQLULEN * レコード・フィールド。 null ポインターの場合、数値は返されません。

このステートメント属性を設定すると、IPD ヘッダーの SQL_DESC_ROWS_PROCESSED_PTR フィールドが設定されます。

この属性が指すバッファーを埋める SQLExecDirect または SQLExecute の呼び出しでSQL_SUCCESSまたはSQL_SUCCESS_WITH_INFOが返されない場合、バッファーの内容は未定義になります。

詳細については、「 パラメーターの配列の使用」を参照してください。
SQL_ATTR_PARAMSET_SIZE (ODBC 3.0) 各パラメーターの値の数を指定する SQLULEN 値。 SQL_ATTR_PARAMSET_SIZEが 1 より大きい場合、APD のSQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR、SQL_DESC_OCTET_LENGTH_PTRは配列を指します。 各配列のカーディナリティは、このフィールドの値と等しくなります。

バインドされたパラメーターがない場合、この属性は無視されます。

詳細については、「 パラメーターの配列の使用」を参照してください。

このステートメント属性を設定すると、APD ヘッダーの SQL_DESC_ARRAY_SIZE フィールドが設定されます。
SQL_ATTR_QUERY_TIMEOUT (ODBC 1.0) アプリケーションに戻る前に SQL ステートメントの実行を待機する秒数に対応する SQLULEN 値。 ValuePtr が 0 (既定値) に等しい場合、タイムアウトはありません。

指定したタイムアウトがデータ ソースの最大タイムアウトを超えているか、最小タイムアウトより小さい場合、 SQLSetStmtAttr はその値を置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。

SELECT ステートメントがタイムアウトした場合にステートメントを再利用するために、アプリケーションで SQLCloseCursor を呼び出す必要はありません。

このステートメント属性で設定されたクエリ タイムアウトは、同期モードと非同期モードの両方で有効です。
SQL_ATTR_RETRIEVE_DATA (ODBC 2.0) SQLULEN 値:

SQL_RD_ON = SQLFetchScroll と ODBC 3.x では、 SQLFetch はカーソルを指定した位置に配置した後にデータを取得します。 既定値です。

SQL_RD_OFF = SQLFetchScroll と ODBC 3.x では、 SQLFetch はカーソルを置いた後にデータを取得しません。

SQL_RETRIEVE_DATAを SQL_RD_OFF に設定すると、アプリケーションは行が存在することを確認したり、行のブックマークを取得したりすることができ、行の取得のオーバーヘッドは発生しません。 詳細については、「 行のスクロールとフェッチ」を参照してください。

この属性の値は、開いているカーソルで設定できます。ただし、この設定はすぐには有効にならない場合があります。その場合、ドライバーは SQLSTATE 01S02 (オプション値の変更) を返し、属性を元の値にリセットします。
SQL_ATTR_ROW_ARRAY_SIZE (ODBC 3.0) SQLFetch または SQLFetchScroll の各呼び出しによって返される行数を指定する SQLULEN 値。 これは、 SQLBulkOperations の一括ブックマーク操作で使用されるブックマーク配列内の行数でもあります。 既定値は 1 です。

指定した行セット サイズがデータ ソースでサポートされている最大行セット サイズを超えた場合、ドライバーはその値を置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。

詳細については、「 行セットのサイズ」を参照してください。

このステートメント属性を設定すると、ARD ヘッダーの SQL_DESC_ARRAY_SIZE フィールドが設定されます。
SQL_ATTR_ROW_BIND_OFFSET_PTR (ODBC 3.0) 列データのバインドを変更するためにポインターに追加されたオフセットを指す SQLULEN * 値。 このフィールドが null 以外の場合、ドライバーはポインターを逆参照し、記述子レコードの遅延フィールド (SQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR、およびSQL_DESC_OCTET_LENGTH_PTR) に逆参照された値を追加し、バインド時に新しいポインター値を使用します。 既定では null に設定されています。

このステートメント属性を設定すると、ARD ヘッダーの SQL_DESC_BIND_OFFSET_PTR フィールドが設定されます。
SQL_ATTR_ROW_BIND_TYPE (ODBC 1.0) 関連付けられたステートメントで SQLFetch または SQLFetchScroll が呼び出されたときに使用されるバインドの向きを設定する SQLULEN 値。 列方向のバインドは、値を SQL_BIND_BY_COLUMN に設定することで選択されます。 行方向のバインドは、値を構造体の長さ、または結果列がバインドされるバッファーのインスタンスに設定することによって選択されます。

長さを指定した場合、バインドされた列のアドレスが指定した長さでインクリメントされると、結果が次の行の同じ列の先頭を指すように、バインドされたすべての列のスペースと構造体またはバッファーのパディングを含める必要があります。 ANSI C で構造体または共用体で sizeof 演算子を使用する場合、この動作は保証されます。

列方向のバインドは、SQLFetch と SQLFetchScroll の既定のバインド方向です。

詳細については、「 ブロック カーソルで使用する列のバインド」を参照してください。

このステートメント属性を設定すると、ARD ヘッダーの SQL_DESC_BIND_TYPE フィールドが設定されます。
SQL_ATTR_ROW_NUMBER (ODBC 2.0) 結果セット全体の現在の行の数である SQLULEN 値。 現在の行の番号を特定できない場合、または現在の行がない場合、ドライバーは 0 を返します。

この属性は、 SQLGetStmtAttr の呼び出しによって取得できますが、 SQLSetStmtAttr の呼び出しでは設定できません。
SQL_ATTR_ROW_OPERATION_PTR (ODBC 3.0) SQLSetPos を使用した一括操作中に行を無視するために使用される SQLUSMALLINT 値の配列を指す SQLUSMALLINT * 値。 各値は、SQL_ROW_PROCEED (一括操作に含める行の場合) またはSQL_ROW_IGNORE (一括操作から除外する行) のいずれかに設定されます。 ( SQLBulkOperations の呼び出し中にこの配列を使用して行を無視することはできません。)

このステートメント属性は null ポインターに設定できます。この場合、ドライバーは行の状態値を返しません。 この属性はいつでも設定できますが、次に SQLSetPos が呼び出されるまで、新しい値は使用されません。

詳細については、「SQLSetPos を使用した行セットの行の更新」および「SQLSetPos を使用した行セットの行の削除」を参照してください。

このステートメント属性を設定すると、ARD のSQL_DESC_ARRAY_STATUS_PTR フィールドが設定されます。
SQL_ATTR_ROW_STATUS_PTR (ODBC 3.0) SQLFetch または SQLFetchScroll の呼び出し後に行の状態値を含む SQLUSMALLINT 値の配列を指す SQLUSMALLINT * 値。 配列には、行セット内の行と同じ数の要素があります。

このステートメント属性は null ポインターに設定できます。この場合、ドライバーは行の状態値を返しません。 この属性はいつでも設定できますが、新しい値は、次回 SQLBulkOperations、SQLFetchSQLFetchScroll、または SQLSetPos が呼び出されるまで使用されません。

詳細については、「 フェッチされた行の数」と「状態」を参照してください。

このステートメント属性を設定すると、IRD ヘッダーの SQL_DESC_ARRAY_STATUS_PTR フィールドが設定されます。

この属性は、ODBC 2.x ドライバーによって、SQLExtendedFetch の呼び出しで rgbRowStatus 配列にマップされます。
SQL_ATTR_ROWS_FETCHED_PTR (ODBC 3.0) SQLFetch または SQLFetchScroll の呼び出し後にフェッチされた行数を返すバッファーを指す SQLULEN * 値。operation 引数が SQL_REFRESH の SQLSetPos の呼び出しによって実行される一括操作の影響を受ける行数。または SQLBulkOperations によって実行される一括操作の影響を受ける行の数。 この数値にはエラー行が含まれます。

詳細については、「 フェッチされた行の数」と「状態」を参照してください。

このステートメント属性を設定すると、IRD ヘッダーの SQL_DESC_ROWS_PROCESSED_PTR フィールドが設定されます。

この属性が指すバッファーを埋める SQLFetch または SQLFetchScroll の呼び出しでSQL_SUCCESSまたはSQL_SUCCESS_WITH_INFOが返されない場合、バッファーの内容は未定義になります。
SQL_ATTR_SIMULATE_CURSOR (ODBC 2.0) 配置された更新ステートメントと delete ステートメントをシミュレートするドライバーが、このようなステートメントが 1 つの行にのみ影響することを保証するかどうかを指定する SQLULEN 値。

位置指定の更新および削除ステートメントをシミュレートするために、ほとんどのドライバーは、現在の行の各列の値を指定する WHERE 句を含む、検索された UPDATE または DELETE ステートメントを作成します。 これらの列が一意のキーを構成しない限り、このようなステートメントは複数の行に影響を与える可能性があります。

このようなステートメントが 1 つの行にのみ影響することを保証するために、ドライバーは一意キーの列を決定し、これらの列を結果セットに追加します。 アプリケーションで結果セット内の列が一意のキーを構成することが保証されている場合、ドライバーはそうする必要はありません。 これにより、実行時間が短縮される可能性があります。

SQL_SC_NON_UNIQUE = ドライバーは、シミュレートされた位置指定の更新または削除ステートメントが 1 つの行にのみ影響することを保証しません。これを行うのはアプリケーションの責任です。 ステートメントが複数の行に影響を与える場合、 SQLExecuteSQLExecDirect、または SQLSetPos は SQLSTATE 01001 (カーソル操作の競合) を返します。

SQL_SC_TRY_UNIQUE = ドライバーは、シミュレートされた位置指定の更新または削除ステートメントが 1 つの行にのみ影響することを保証しようとします。 ドライバーは、一意のキーがない場合など、複数の行に影響を与える可能性がある場合でも、常にこのようなステートメントを実行します。 ステートメントが複数の行に影響を与える場合、 SQLExecuteSQLExecDirect、または SQLSetPos は SQLSTATE 01001 (カーソル操作の競合) を返します。

SQL_SC_UNIQUE = ドライバーは、シミュレートされた位置指定の更新または削除ステートメントが 1 つの行にのみ影響することを保証します。 ドライバーが特定のステートメントに対してこれを保証できない場合、 SQLExecDirect または SQLPrepare はエラーを返します。

データ ソースが位置指定された更新ステートメントと delete ステートメントのネイティブ SQL サポートを提供し、ドライバーがカーソルをシミュレートしない場合、SQL_SC_UNIQUEがSQL_SIMULATE_CURSORに対して要求されたときにSQL_SUCCESSが返されます。 SQL_SC_TRY_UNIQUEまたはSQL_SC_NON_UNIQUEが要求された場合、SQL_SUCCESS_WITH_INFOが返されます。 データ ソースがSQL_SC_TRY_UNIQUEレベルのサポートを提供し、ドライバーが提供しない場合は、SQL_SC_TRY_UNIQUEのSQL_SUCCESSが返され、SQL_SC_NON_UNIQUEに対してSQL_SUCCESS_WITH_INFOが返されます。

指定したカーソル シミュレーションの種類がデータ ソースでサポートされていない場合、ドライバーは別のシミュレーションの種類を置き換え、SQLSTATE 01S02 を返します (オプション値が変更されました)。 SQL_SC_UNIQUEの場合、ドライバーは順番に、SQL_SC_TRY_UNIQUEまたはSQL_SC_NON_UNIQUEを置き換える。 SQL_SC_TRY_UNIQUEの場合、ドライバーは SQL_SC_NON_UNIQUEを置き換える。

既定値は SQL_SC_UNIQUE です。

詳細については、「 位置指定された更新ステートメントと Delete ステートメントのシミュレート」を参照してください
SQL_ATTR_USE_BOOKMARKS (ODBC 2.0) アプリケーションがカーソル付きのブックマークを使用するかどうかを指定する SQLULEN 値。

SQL_UB_OFF = オフ (既定値)

SQL_UB_VARIABLE = アプリケーションはカーソル付きのブックマークを使用し、ドライバーがサポートされている場合は可変長ブックマークを提供します。 SQL_UB_FIXEDは ODBC 3.x では非推奨です。 ODBC 3.x アプリケーションでは、ODBC 2.x ドライバー (4 バイトの固定長ブックマークのみをサポート) を使用する場合でも、常に可変長ブックマークを使用する必要があります。 これは、固定長ブックマークは可変長ブックマークの特殊なケースに過ぎないためです。 ODBC 2.x ドライバーを使用する場合、ドライバー マネージャーはSQL_UB_VARIABLEをSQL_UB_FIXEDにマップします。

カーソルでブックマークを使用するには、カーソルを開く前にSQL_UB_VARIABLE値でこの属性を指定する必要があります。

詳細については、「 ブックマークの取得」を参照してください。

[1] これらの関数は、記述子が実装記述子であり、アプリケーション記述子ではない場合にのみ非同期的に呼び出すことができます。

「列方向のバインド」と「行方向のバインド」を参照してください。

対象 解決方法については、
ステートメント処理の取り消し SQLCancel 関数
接続属性の設定を返す SQLGetConnectAttr 関数
ステートメント属性の設定を返す SQLGetStmtAttr 関数
接続属性の設定 SQLSetConnectAttr 関数
記述子の単一フィールドの設定 SQLSetDescField 関数

参照

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