Compartir a través de


Establecer opciones de cursor (ODBC)

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);  

Véase también

Ejecución de temas de procedimientos de consultas (ODBC)