En ocasiones el conjunto resultado de un SELECT se utiliza para imprimir informes. Por ejemplo, un informe de ventas, o un informe de cobranzas, los cuales el usuario quiere tener impresos en papel.

También puede ocurrir que al usuario le interese imprimir solamente alguna página en especial. Por ejemplo, cayó café sobre la página número cinco, se hizo un desastre, y por eso el usuario quiere volver a imprimir solamente la página cinco; las demás no, porque las demás no se mancharon con café.

Si sabemos cuantas filas del conjunto resultado se imprimen en cada página entonces es muy fácil obtener las filas que nos interesan.

Ejemplo 1:

  • En cada página se imprimen 40 filas
  • Queremos re-imprimir la página número 5
SELECT
   MiColumna1,
   MiColumna2
FROM
   MiTabla
ROWS
   (5 - 1) * 40 + 1 TO 5 * 40

En este ejemplo se obtendrán las filas 161 a 200, o sea todas las filas que corresponden a la página número 5, ya que cada página tiene 40 filas.

Ejemplo 2:

  • En cada página se imprimen 40 filas
  • Queremos re-imprimir las páginas números 5 y 6
SELECT
   MiColumna1,
   MiColumna2
FROM
   MiTabla
ROWS
   (5 - 1) * 40 + 1 TO (5 + 1) * 40

En este ejemplo se obtendrán las filas 161 a 240, o sea todas las filas que corresponden a la página número 5 ó a la página número 6.

Forma general

La forma general, para usarla con cualquier números de página, cualquier cantidad de páginas y con cualquier cantidad de filas, es:

SELECT
   MiColumna1,
   MiColumna2
FROM
   MiTabla
ROWS
   (nPaginaNro - 1) * nCantidadFilas + 1 TO (nPaginaNro + (nCantidadPaginas - 1)) * nCantidadFilas

En esta fórmula hay que reemplazar a nPaginaNro por el número de la primera página que queremos imprimir (en nuestro ejemplo sería 5). Hay que reemplazar a nCantidadFilas por la cantidad de filas que tiene cada página (en nuestro ejemplo sería 40). Hay que reemplazar a nCantidadPaginas por la cantidad de páginas que queremos imprimir (en nuestro último ejemplo sería 2).

Artículo relacionado:

El índice del blog Firebird21