カーソルの特定とカーソルの種類
アプリケーションでは、カーソルの種類 (前方のみ、静的、キーセットドリブン、または動的) を指定する代わりに、カーソルの特性を指定できます。 これを行うには、アプリケーションは、ステートメント ハンドルでカーソルを開く前に、カーソルのスクロール可能性 (SQL_ATTR_CURSOR_SCROLLABLE ステートメント属性の設定) と機密度 (SQL_ATTR_CURSOR_SENSITIVITY ステートメント属性の設定) を選択します。 次に、ドライバーは、アプリケーションが要求した特性を最も効率的に提供するカーソルの種類を選択します。
アプリケーションがステートメント属性の SQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_SCROLLABLE、SQL_ATTR_CURSOR_SENSITIVITY、またはSQL_ATTR_CURSOR_TYPE を設定するたびに、ドライバーは、値の一貫性を維持するために、この 4 つの属性のセット内の他のステートメント属性に必要な変更を行います。 その結果、アプリケーションがカーソルの特性を指定すると、ドライバーは、この暗黙的な選択に基づいてカーソルの種類を示す属性を変更できます。アプリケーションが型を指定すると、ドライバーは、選択した型の特性と一致するように他の属性のいずれかを変更できます。 これらのステートメント属性の詳細については、SQLSetStmtAttr 関数の説明を参照してください。
カーソルの種類とカーソルの特性の両方を指定するようにステートメント属性を設定するアプリケーションは、アプリケーションの要件を満たすドライバーで使用できる最も効率的な方法ではないカーソルを取得するリスクを含みます。
ステートメント属性の暗黙的な設定は、次の規則に従う必要がある点を除き、ドライバーによって定義されます。
順方向専用カーソルはスクロールできません。SQLSetStmtAttr の SQL_ATTR_CURSOR_SCROLLABLE の定義を参照してください。
非反映型カーソルは更新できません (したがって、コンカレンシーは読み取り専用です)。これは、ISO SQL 標準での非反映型カーソルの定義に基づいています。
したがって、ステートメント属性の暗黙的な設定は、次の表で説明する場合に発生します。
アプリケーションの属性設定内容 | 暗黙的に設定されるその他の属性 |
---|---|
SQL_ATTR_CONCURRENCY を SQL_CONCUR_READ_ONLY にする | SQL_ATTR_CURSOR_SENSITIVITY を SQL_INSENSITIVE にする。 |
SQL_ATTR_CONCURRENCY を SQL_CONCUR_LOCK、SQL_CONCUR_ROWVER、または SQL_CONCUR_VALUES にする | ドライバーによって定義される通り、SQL_ATTR_CURSOR_SENSITIVITY を SQL_UNSPECIFIED または SQL_SENSITIVE にする。 非反映型カーソルは常に読み取り専用であるため、SQL_INSENSITIVE に設定することはできません。 |
SQL_ATTR_CURSOR_SCROLLABLE を SQL_NONSCROLLABLE にする | SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_FORWARD_ONLY にする |
SQL_ATTR_CURSOR_SCROLLABLE を SQL_SCROLLABLE にする | ドライバーで指定される通り、SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_STATIC、SQL_CURSOR_KEYSET_DRIVEN、または SQL_CURSOR_DYNAMIC にする。 SQL_CURSOR_FORWARD_ONLY に設定されることはありません。 |
SQL_ATTR_CURSOR_SENSITIVITY を SQL_INSENSITIVE にする | SQL_ATTR_CONCURRENCY を SQL_CONCUR_READ_ONLY にする。 SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_STATIC にする。 |
SQL_ATTR_CURSOR_SENSITIVITY を SQL_SENSITIVE にする | ドライバーで指定される通り、SQL_ATTR_CONCURRENCY を SQL_CONCUR_LOCK、SQL_CONCUR_ROWVER、または SQL_CONCUR_VALUES にする。 SQL_CONCUR_READ_ONLY に設定されることはありません。 ドライバーで指定される通り、SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_FORWARD_ONLY、SQL_CURSOR_STATIC、SQL_CURSOR_KEYSET_DRIVEN、または SQL_CURSOR_DYNAMIC にする。 |
SQL_ATTR_CURSOR_SENSITIVITY を SQL_UNSPECIFIED にする | ドライバーで指定される通り、SQL_ATTR_CONCURRENCY を SQL_CONCUR_READ_ONLY、SQL_CONCUR_LOCK、SQL_CONCUR_ROWVER、または SQL_CONCUR_VALUES にする。 ドライバーで指定される通り、SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_FORWARD_ONLY、SQL_CURSOR_STATIC、SQL_CURSOR_KEYSET_DRIVEN、または SQL_CURSOR_DYNAMIC にする。 |
SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_DYNAMIC にする | SQL_ATTR_SCROLLABLE を SQL_SCROLLABLE にする。 SQL_ATTR_CURSOR_SENSITIVITY を SQL_SENSITIVE にする。 (ただし、SQL_ATTR_CONCURRENCY が SQL_CONCUR_READ_ONLY と等しくない場合に限られます。更新可能な動的カーソルは、独自のトランザクションで行われた変更に常に影響を受けます)。 |
SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_FORWARD_ONLY にする | SQL_ATTR_CURSOR_SCROLLABLE を SQL_NONSCROLLABLE にする。 |
SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_KEYSET_DRIVEN にする | SQL_ATTR_SCROLLABLE を SQL_SCROLLABLE にする。 (SQL_ATTR_CONCURRENCY が SQL_CONCUR_READ_ONLY になっていない場合は、ドライバー定義の条件に従って) SQL_ATTR_SENSITIVITY を SQL_UNSPECIFIED または SQL_SENSITIVE にする。 |
SQL_ATTR_CURSOR_TYPE を SQL_CURSOR_STATIC にする | SQL_ATTR_SCROLLABLE を SQL_SCROLLABLE にする。 SQL_ATTR_SENSITIVITY を SQL_INSENSITIVE にする (SQL_ATTR_CONCURRENCY が SQL_CONCUR_READ_ONLY の場合)。 SQL_ATTR_SENSITIVITY を SQL_UNSPECIFIED または SQL_SENSITIVE にする (SQL_ATTR_CONCURRENCY が SQL_CONCUR_READ_ONLY ではない場合)。 |