Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para establecer las opciones de cursor, llame a SQLSetStmtAttr para establecer o SQLGetStmtAttr para obtener las opciones de instrucción que controlan el comportamiento del cursor.
| Atributo | Especifica |
|---|---|
| SQL_ATTR_CURSOR_TYPE | Tipo de cursor de solo avance, estático, dinámico o controlado por conjuntos de claves |
| SQL_ATTR_CONCURRENCY | Opción de control de simultaneidad de solo lectura, bloqueo, optimista mediante marcas de tiempo o optimista mediante valores |
| SQL_ATTR_ROW_ARRAY_SIZE | Número de filas recuperadas en cada captura |
| SQL_ATTR_CURSOR_SENSITIVITY | Cursor que sí o no muestra actualizaciones de las filas del cursor realizadas por otras conexiones |
| SQL_ATTR_CURSOR_SCROLLABLE | Cursor que se puede desplazar hacia delante y hacia atrás |
Los valores predeterminados de estos atributos (solo avance, de solo lectura, tamaño de conjunto de filas de 1) no usan cursores de servidor. Para usar cursores de servidor, al menos uno de estos atributos debe establecerse en un valor distinto del predeterminado y la instrucción que se ejecuta debe ser una sola instrucción SELECT o un procedimiento almacenado que contenga una sola instrucción SELECT. Al usar cursores de servidor, las instrucciones SELECT no pueden usar cláusulas no admitidas por cursores de servidor: COMPUTE, COMPUTE BY, FOR BROWSE e INTO.
Puede controlar el tipo de cursor usado estableciendo SQL_ATTR_CURSOR_TYPE y SQL_ATTR_CONCURRENCY, o estableciendo SQL_ATTR_CURSOR_SENSITIVITY y SQL_ATTR_CURSOR_SCROLLABLE. No debe mezclar los dos métodos para especificar el comportamiento del cursor.
Ejemplo
En el ejemplo siguiente se asigna un identificador de instrucción, se establece un tipo de cursor dinámico con simultaneidad optimista de control de versiones de fila y, a continuación, se ejecuta una instrucción SELECT.
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);
Ejemplo
En el ejemplo siguiente se asigna un identificador de instrucción, se establece un cursor desplazable, confidencial y, a continuación, se ejecuta una instrucción SELECT.
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
// Set the cursor options and execute the statement.
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);