Compartir a través de


Cómo establecer las opciones del cursor (ODBC)

Si desea establecer las opciones del cursor, llame a SQLSetStmtAttr para establecer las opciones de estado que controlan el comportamiento del cursor o llame a SQLGetStmtAttr para obtenerlas.

Atributo

Especifica

SQL_ATTR_CURSOR_TYPE

Tipo de cursor de sólo avance, estático, dinámico o controlado por conjunto de claves

SQL_ATTR_CONCURRENCY

Opción de control de simultaneidad de sólo lectura, bloqueo, marcas de tiempo de uso optimista o valores de uso optimista

SQL_ATTR_ROW_ARRAY_SIZE

Número de filas obtenido en cada captura

SQL_ATTR_CURSOR_SENSITIVITY

Cursor que puede mostrar o no las actualizaciones realizadas por otras conexiones en las filas del cursor

SQL_ATTR_CURSOR_SCROLLABLE

Cursor que puede desplazarse hacia delante y hacia atrás

Los valores predeterminados de estos atributos (sólo avance, sólo lectura, tamaño del conjunto de filas igual a 1) no usan los cursores del servidor. Para usar los cursores del servidor, al menos uno de estos atributos debe establecerse en un valor distinto del predeterminado y la instrucción en ejecución debe ser una instrucción SELECT única o un procedimiento almacenado que contenga una instrucción SELECT única. Cuando se utilizan los cursores del servidor, las instrucciones SELECT no pueden utilizar cláusulas que no sean compatibles con los cursores del servidor: COMPUTE, COMPUTE BY, FOR BROWSE e INTO.

Puede controlar el tipo de cursor utilizando 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 que se utilizan para especificar el comportamiento del cursor.

Ejemplo

En el siguiente ejemplo se asigna un identificador de instrucción, se establece un tipo de cursor dinámico con simultaneidad optimista 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, _IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, _IS_INTEGER);
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);

En el siguiente ejemplo se asigna un identificador de instrucción, se establece un cursor desplazable de tipo SENSITIVE 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, _IS_INTEGER);
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, _IS_INTEGER);
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);