Desplazamiento relativas y absolutas

La mayoría de las opciones de desplazamiento de SQLFetchScroll colocan el cursor en relación con la posición actual o con una posición absoluta. SQLFetchScroll admite la captura de los conjuntos de filas siguiente, anterior, primero y último, así como la captura relativa (capturar n filas del conjunto de filas desde el principio del conjunto de filas actual) y la captura absoluta (capturar el conjunto de filas desde la fila n). Si n es un valor negativo en una captura absoluta, las filas se cuentan desde el final del conjunto de resultados. Por lo tanto, una captura absoluta de la fila -1 significa que se capturará el conjunto de filas que empieza con la última fila del conjunto de resultados.

Los cursores dinámicos detectan filas insertadas y eliminadas en el conjunto de resultados, por lo que no hay ninguna manera fácil de que los cursores dinámicos recuperen la fila en un número determinado que no sea leer desde el principio del conjunto de resultados, lo que es probable que sea lento. Además, la captura absoluta no es muy útil en cursores dinámicos porque los números de fila cambian a medida que se insertan y eliminan filas; por lo tanto, la captura sucesiva del mismo número de fila puede producir filas diferentes.

Es probable que las aplicaciones que usen SQLFetchScroll solo para sus capacidades de cursor de bloque, como los informes, pasen por el conjunto de resultados una sola vez, solo con la opción para capturar el siguiente conjunto de filas. Por otro lado, las aplicaciones basadas en pantalla pueden aprovechar todas las capacidades de SQLFetchScroll. Si la aplicación establece el tamaño del conjunto de filas en el número de filas que se muestran en la pantalla y enlaza los búferes de pantalla al conjunto de resultados, puede traducir las operaciones de barra de desplazamiento directamente a llamadas a SQLFetchScroll.

Funcionamiento de la barra de desplazamiento Opción de desplazamiento de SQLFetchScroll
Re Pág SQL_FETCH_PRIOR
Página abajo SQL_FETCH_NEXT
Línea arriba SQL_FETCH_RELATIVE con FetchOffset igual a -1
Línea abajo SQL_FETCH_RELATIVE con FetchOffset igual a 1
Cuadro de desplazamiento en la parte superior SQL_FETCH_FIRST
Cuadro de desplazamiento en la parte inferior SQL_FETCH_LAST
Posición del cuadro de desplazamiento aleatoria SQL_FETCH_ABSOLUTE

Estas aplicaciones también deben colocar el cuadro de desplazamiento después de una operación de desplazamiento, que requiere el número de fila actual y el número de filas. En el caso del número de fila actual, las aplicaciones pueden realizar un seguimiento del número de fila actual o llamar a SQLGetStmtAttr con el atributo SQL_ATTR_ROW_NUMBER para recuperarlo.

El número de filas del cursor, que es el tamaño del conjunto de resultados, está disponible en el campo SQL_DIAG_CURSOR_ROW_COUNT del encabezado de diagnóstico. El valor de este campo se define solo después de llamar a SQLExecute, SQLExecDirect o SQLMoreResult. Este recuento puede ser un recuento aproximado o un recuento exacto, en función de las capacidades del controlador. Para determinar la compatibilidad del controlador, se puede llamar a SQLGetInfo con los tipos de información de atributos de cursor y comprobar si se devuelve el bit SQL_CA2_CRC_APPROXIMATE o SQL_CA2_CRC_EXACT para el tipo de cursor.

Nunca se admite un recuento exacto de filas para un cursor dinámico. Para otros tipos de cursores, el controlador puede admitir recuentos exactos o aproximados de filas, pero no ambos. Si el controlador no admite recuentos exactos ni aproximados de filas para un tipo de cursor específico, el campo SQL_DIAG_CURSOR_ROW_COUNT contiene el número de filas que se han capturado hasta ahora. Independientemente de lo que admita el controlador, SQLFetchScroll con el argumento Operation establecido en SQL_FETCH_LAST hará que el campo SQL_DIAG_CURSOR_ROW_COUNT contenga el recuento exacto de filas.