Compartir a través de


Cómo utilizar cursores (ODBC)

Para usar cursores

  1. Llame a SQLSetStmtAttr para establecer los atributos de cursor deseados:

    Establezca los atributos SQL_ATTR_CURSOR_TYPE y SQL_ATTR_CONCURRENCY (ésta es la opción preferida).

    O bien

    Establezca los atributos SQL_CURSOR_SCROLLABLE y SQL_CURSOR_SENSITIVITY.

  2. Llame a SQLSetStmtAttr para establecer el tamaño del conjunto de filas mediante el atributo SQL_ATTR_ROW_ARRAY_SIZE.

  3. Opcionalmente, llame a SQLSetCursorName para establecer un nombre de cursor si las actualizaciones posicionadas se van a hacer mediante la cláusula de WHERE CURRENT OF.

  4. Ejecute la instrucción SQL.

  5. Opcionalmente, llame a SQLGetCursorName para obtener el nombre de cursor si las actualizaciones posicionadas se van a hacer mediante la cláusula WHERE ACTUAL OF y un nombre de cursor no se proporcionó con SQLSetCursorName en el paso 3.

  6. Llame a SQLNumResultCols para obtener el número de columnas (C) en el conjunto de filas.

    Use el enlace de modo de columna.

    O bien

    Use el enlace de modo de fila.

  7. Capture los conjuntos de filas del cursor según sea necesario.

  8. Llame a SQLMoreResults para determinar si otro conjunto de resultados está disponible.

    • Si devuelve SQL_SUCCESS, está disponible otro conjunto de resultados.

    • Si devuelve SQL_NO_DATA, no hay ningún otro conjunto de resultados disponible.

    • Si devuelve SQL_SUCCESS_WITH_INFO o SQL_ERROR, llame a SQLGetDiagRec para determinar si está disponible la salida de una instrucción PRINT o RAISERROR.

    Si se utilizan parámetros de instrucción enlazados como parámetros de salida o como valor devuelto de un procedimiento almacenado, utilice los datos ahora disponibles en los búferes de parámetros enlazados.

    Si se utilizan parámetros enlazados, cada llamada a SQLExecute o SQLExecDirect habrá ejecutado la instrucción SQL S veces, donde S es el número de elementos en la matriz de parámetros enlazados. Esto significa que habrá S conjuntos de resultados para procesar, donde cada conjunto de resultados comprende todos los conjuntos de resultados, parámetros de salida y códigos de retorno devueltos normalmente por una ejecución única de la instrucción SQL.

    Tenga en cuenta que cuando un conjunto de resultados contiene filas del cálculo, cada fila del cálculo está disponible como un conjunto de resultados independiente. Estos conjuntos de resultados de cálculo se intercalan entre las filas normales e interrumpen las filas normales en varios conjuntos de resultados.

  9. Opcionalmente, llame a SQLFreeStmt con SQL_UNBIND para liberar los búferes de columna enlazada.

  10. Si está disponible otro conjunto de resultados, vaya al paso 6.

    En el paso 9, al llamar a SQLMoreResults en un conjunto de resultados procesados parcialmente se borra el resto del conjunto de resultados. Otra manera de borrar un conjunto de resultados procesados parcialmente es llamar a SQLCloseCursor.

    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 que se utilizan para especificar el comportamiento del cursor.