Características del cursor y el tipo de Cursor

Una aplicación puede especificar las características de un cursor, en lugar de especificar el tipo de cursor (de solo avance, estático, controlado por conjuntos de claves o dinámico). Para ello, la aplicación selecciona la capacidad de desplazamiento del cursor (al establecer el atributo SQL_ATTR_CURSOR_SCROLLABLE de la instrucción) y la sensibilidad (al establecer el atributo SQL_ATTR_CURSOR_SENSITIVITY de la instrucción) antes de abrir el cursor en el identificador de la instrucción. A continuación, el controlador elige el tipo de cursor que proporciona de forma más eficaz las características que solicitó la aplicación.

Cada vez que una aplicación establece cualquiera de los atributos SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY o SQL_ATTR_CURSOR_TYPE de la instrucción, el controlador realiza cualquier cambio necesario en los demás atributos de la instrucción de este conjunto de cuatro atributos para que sus valores sigan siendo coherentes. Como consecuencia, cuando la aplicación especifica una característica del cursor, el controlador puede cambiar el atributo que indica el tipo de cursor en función de esta selección implícita; cuando la aplicación especifica un tipo, el controlador puede cambiar cualquiera de los demás atributos para que sean coherentes con las características del tipo seleccionado. Para obtener más información sobre estos atributos de instrucción, consulte la descripción de la función SQLSetStmtAttr.

Una aplicación que establece los atributos de instrucción para especificar tanto un tipo de cursor como las características del cursor corre el riesgo de obtener un cursor que no sea el método más eficaz disponible dentro de ese controlador para cumplir los requisitos de la aplicación.

El valor implícito de los atributos de la instrucción está definido por el controlador, excepto que debe seguir estas reglas:

  • Los cursores de solo avance nunca se pueden desplazar; vea la definición de SQL_ATTR_CURSOR_SCROLLABLE en SQLSetStmtAttr.

  • Los cursores INSENSITIVE nunca son actualizables (y, por tanto, su simultaneidad es de solo lectura); esto se basa en su definición de cursores INSENSITIVE en el estándar ISO para SQL.

Por lo tanto, el valor implícito de los atributos de la instrucción se produce en los casos descritos en la tabla siguiente.

La aplicación establece el atributo en Otros atributos que se establecen implícitamente
SQL_ATTR_CONCURRENCY en SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY en SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY en SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY en SQL_UNSPECIFIED o SQL_SENSITIVE, según lo definido por el controlador. Nunca se puede establecer en SQL_INSENSITIVE, ya que los cursores INSENSITIVE siempre son de solo lectura.
SQL_ATTR_CURSOR_SCROLLABLE en SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SCROLLABLE en SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, según lo especifique el controlador. Nunca se establece en SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY en SQL_INSENSITIVE SQL_ATTR_CONCURRENCY en SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY en SQL_SENSITIVE SQL_ATTR_CONCURRENCY en SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES, según lo especifique el controlador. Nunca se establece en SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, según lo especifique el controlador.
SQL_ATTR_CURSOR_SENSITIVITY en SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY en SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER o SQL_CONCUR_VALUES, según lo especifique el controlador.

SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN o SQL_CURSOR_DYNAMIC, según lo especifique el controlador.
SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE en SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY en SQL_SENSITIVE. (Pero solo si SQL_ATTR_CONCURRENCY no es igual a SQL_CONCUR_READ_ONLY. Los cursores dinámicos actualizables siempre son sensibles a los cambios realizados en su propia transacción).
SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_FORWARD_ONLY. SQL_ATTR_CURSOR_SCROLLABLE en SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE en SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY en SQL_UNSPECIFIED o SQL_SENSITIVE (según los criterios definidos por el controlador, si SQL_ATTR_CONCURRENCY no es SQL_CONCUR_READ_ONLY).
SQL_ATTR_CURSOR_TYPE en SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE en SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY en SQL_INSENSITIVE (si SQL_ATTR_CONCURRENCY es SQL_CONCUR_READ_ONLY).

SQL_ATTR_SENSITIVITY en SQL_UNSPECIFIED o SQL_SENSITIVE (si SQL_ATTR_CONCURRENCY no es SQL_CONCUR_READ_ONLY).