Programación en castellano
Inicio > Taller Web > Internet > ASP > Paginar Datos
-Artículos

Paginar Datos

1 . Estableciendo la conexión y el conjunto de registros
2 . Definiendo la paginación
3 . Mostrando las páginas
4 . Construir los hipervínculos para moverse entre las páginas
5 . Conclusión

Paginación entre registros

El siguiente artículo describe como realizar la paginación de un conjunto de registros. Se muestran las técnicas para :

  • Realizar la paginación en conjuntos de x registros
  • Construir la tabla con hipervínculos para navegar entre las páginas de resultados
  • Pasar los parámetros necesarios entre las distintas páginas

Es recomendable tener conocimientos básicos sobre acceso a base de datos desde asp y paso de parámetros entre páginas.

Estableciendo la conexión y el conjunto de registros

El primer paso, si Ud. ya está familiarizado con el acceso a datos, no presenta nada nuevo, creamos una conexión y definimos la cadena de consulta de la manera habitual. En este ejemplo utilizaremos una tabla llamada "Libros" de una Base de Datos "Editorial" a la que accedemos con el origen de datos "dsnedit".

Acceso a la base de datos

<%
'----- conectar
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "dsnedit",,"ODBC;DATABASE=Editorial;UID=;PWD=;DSN=dsnedit"

'----- definir cadena sql
sql = "SELECT * FROM libros"
%>

Definiendo la paginación

Ahora si vamos a dar los primeros pasos en la paginación. El proceso consiste básicamente en establecer las propiedades que determinarán la cantidad de registros a mostrar y la página actual.

Definimos una variable con la cantidad de registros por página

<%
cantidadregistros=5
%> 

A continuación vamos a determinar que página hay que mostrar y asignamos ese valor a una variable. Aquí aparece el primer parámetro que debemos pasar entre páginas, "paginaactual". Más adelante veremos como se pasa este parámetro.

<%
if request.querystring("paginaactual")<>"" then
     mostrarpagina=request.querystring("paginaactual")
else
     mostrarpagina=1
end if
%> 

... y es el momento de abrir el recordset

<%
set rs=Server.CreateObject("ADODB.Recordset")
rs.cachesize=60
rs.open sql, conn, 3, 3 
%> 

Ya estamos en condiciones de realizar la paginación,

<%
rs.pagesize=cantidadregistros
maxpagina=cint(rs.pagecount)
maxregistros=cint(rs.pagesize)
rs.absolutepage=mostrarpagina
contreg=0 
%> 

Veamos en detalle que hemos hecho. Hemos establecido la propiedad pagesize del objeto recordset en 5 ("cantidadregistro"). Guardamos la cantidad de paginas y su tamaño en dos variables. Con absolutepage indicamos que página debe mostrarse. Por último inicializamos un contador que vamos a usar al mostrar los registros.

Mostrando las páginas

Llegó el momento de mostrar el resultado. En primer lugar vamos a determinar los valores "desde" y "hasta".

<%
if int(mostrarpagina)<>int(maxpagina) then        '-- Si no es la última página.
     hasta=mostrarpagina*5
     desde=hasta-4
else
     hasta=rs.recordcount
     desde=(maxpagina*5)-4
end if 
%> 

Si en lugar de cinco registros quiere mostrar diez, sólo cambie los "5" por "10" y los "4" por "9".

Mostramos los valores recién calculados...

<%
response.write "Resultados : " 
response.write desde & " a " & hasta & " de " & rs.recordcount & " encontrados." 
%> 

Y construimos el ciclo que muestra los registros,

<%
do while not rs.eof and contreg < maxregistros
     response.write rs.fields("campo") & "<br>"
     rs.movenext
     contreg=contreg+1 
loop 
%> 

Observe que ademas de controlar la propiedad eof, como se hace habitualmente, debemos verificar la cantidad de registros mostrados.

Construir los hipervínculos para moverse entre las páginas

Para terminar, sólo resta construir la lista de páginas y opcionalmente los hipervínculos "Anterior" y "Siguiente". Al terminar debemos tener algo como,

[<<Anterior] 01 02 03 04 [Siguiente>>]

Los hipervínculos de esta lista llaman, obviamente, a la misma pagina en la que estamos trabajando, por lo que podemos referirnos a la misma con una variable (lo que facilita la reutilización del código)

La variable "cero" se la agregaremos a las páginas 1 a 9. Si hay mas páginas asignamos a "cero" una cadena vacía.

A continuación, armamos la lista de hipervínculos. En primer lugar, si no estamos en la primer página guardamos en una variable el link "Anterior". En segundo lugar, guardamos en la variable la lista de páginas con un ciclo For...Next. Finalmente, si no estamos en la última página agregamos a la variable el link "Siguiente".

Paginación

<%

cero="0"
nombrescript=request.servervariables("script_name")
if int(mostrarpagina)<>1 then       '--si no es la primer página mostrar botón atrás
    ref="<a href='" & nombrescript & "?buscar=" &_
          Server.Urlencode(request.querystring("buscar")) 
    ref=ref &  "&paginaactual=" & mostrarpagina-1
    ref=ref & "'>[<< Anterior]</a>&nbsp;"
end if

for contador=1 to maxpagina

    If contador>9 then
       cero=""
    end if

    ref=ref & "&nbsp;<a href='" & nombrescript 
    ref=ref & "?buscar=" & Server.Urlencode(request.querystring("buscar")) 
    ref=ref & "&paginaactual=" & contador

    if int(contador)=int(mostrarpagina) then      '-- pone en negrita pagina actual
        ref=ref & "'><strong>" & cero & contador & "</strong></a>"
    else
        ref=ref & "'>" & cero & contador & "</a>"
    end if

next

if int(mostrarpagina)<>int(maxpagina) then     '-- si no es la última página 
                                               '   mostrar botón siguiente

    ref=ref & "&nbsp;<a href='" & nombrescript & "?buscar=" 
    ref=ref & Server.Urlencode(request.querystring("buscar")) 
    ref=ref & "&paginaactual=" & mostrarpagina+1
    ref=ref & "'>[Siguiente >>]</a>"

end if

response.write ref
%>

Si observa detenidamente el código, se dará cuenta de que he incluido un parámetro "buscar". Al principio, cuando construí la consulta sql, simplemente accedí a una tabla entera, por lo que en este ejemplo no haría falta ese parámetro. No obstante, es muy probable que Ud. quiera paginar los resultados de una búsqueda. En ese caso, es importante que recuerde pasar entre las distintas páginas de resultados todos los parámetros necesarios.

Conclusión

En este artículo hemos visto un ejemplo muy simple de como paginar los resultados de una búsqueda. Para reducir al mínimo el código no he incluido verificaciones sobre si la tabla está vacía y otros detalles que Ud. deberá tener en cuenta en sus páginas. La paginación es casi siempre recomendable a mi criterio, tanto desde lo funcional como desde lo estético, y no requiere como habrá podido comprobar, ningún esfuerzo excepcional de programación.

 

Últimos comentarios
Últimos 5 comentarios

Ayuda con los parámetros (15/04/2008)

Por
...Bueno hola amigos:

El tema es el siguiente: aparentemente la paginación de resultados está bien, según el ejemplo, es decir; hago una consulta mediante una determinada opción (option 1,2,3) y datos (txtarea), me indica la cantidad de registros y el # de las páginas en que se mostrarán dichos registros, pero al clikear en los siguientes números de páginas no sale nada, mas bien tengo que seleccionar nuevamente la opción e ingresar el mismo dato para que me muestre los siguientes registros de las otras páginas. ¿Cómo hago? para solucionar esto.

Ah... estoy pasando los parametros bien.

Mesma duda (05/04/2008)

Por
Hola, todo me funcionó bien, cuando hago la busqueda me dice resultados 50 de 100, pero cuando voy a la segunda pagina me muestra todos los 100 de 100, y el indice desparece, quedando todos los registros sin filtrar.
ayuda y gracias

Excelente (15/01/2008)

Por
Excelente codigo me funciono muy bien Mil gracias.

Paginación de Resultados con ASP !!! (27/08/2007)

Por
Saludos, en el ejemplo de paginación de resultados a través de un recordset en: http://www.programacion.com/asp/articulo/paginacion_asp/

Ya lo hice, pero solo funciona al primer tiro, cuando uno clikea cualquier otro link, mustra el resultado total del sitio y no de la busqueda..

Si me pueden ayudar se los agradesería un monton...

Paginación de Resultados con ASP !!! (27/08/2007)

Por
Saludos, en el ejemplo de paginación de resultados a través de un recordset en: http://www.programacion.com/asp/articulo/paginacion_asp/

Ya lo hice, pero solo funciona al primer tiro, cuando uno clikea cualquier otro link, mustra el resultado total del sitio y no de la busqueda..

Si me pueden ayudar se los agradesería un monton...
 
Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados