Paginar con ASP clásico

Código ASP clásico

El siguiente ejemplo sirve para realizar una paginación de resultados extraídos de una base de datos a través de una consulta con ASP 3.0. La paginación brinda un aspecto diferente al mostrar un listado, mucho más profesional y cómodo para el usuario, seguramente les ha pasado de tener muchos registros y al mostrarlos tenian una página demasiado larga y lenta en cargar.

paginar.asp

  <%
Dim mostrar 'cantidad de registros a mostrar por página
Dim cant_paginas 'cantidad de páginas que recibimos
Dim pagina_actual 'La página que mostramos
Dim registro_mostrado 'Contador utilizado para mostrar las páginas
Dim I 'Variable Loop

mostrar = 10 ' Pueden modificar este número para cambiar la cantidad de registros por página

' IF para saber que página mostrar
If Request.QueryString("page") = "" Then
pagina_actual = 1
Else
pagina_actual = CInt(Request.QueryString("page"))
End If

strsql = "SELECT * FROM tabla"

' Creamos la conexion a la base de datos
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open StrConn

' Creamos el RecordSet y definimos la cantidad de registros a mostrar
Set RS = Server.CreateObject("ADODB.Recordset")
RS.PageSize = mostrar
RS.CacheSize = mostrar

' Abrimos la tabla...
RS.Open strSQL, oConn,3,1
'contamos las páginas que se formaron con la variable mostrar.
cant_paginas = RS.PageCount

' Si el pedido de página cae afuera del rango,
' lo modificamos para que caiga adentro
If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
If pagina_actual < 1 Then pagina_actual = 1

' Si la cantidad de páginas da 0 es que no hay registros... por eso este IF
If cant_paginas = 0 Then
Response.Write "No hay registros..."
Else
' Nos movemos a la página elegida
RS.AbsolutePage = pagina_actual
' Mostramos el dato de que página estamos...
%>
<FONT SIZE="+1">Page <B><%= pagina_actual %></B> of <B><%= cant_paginas %></B></FONT>
<%
' Espacios
Response.Write "<BR><BR>" & vbCrLf
'iniciamos la tabla donde mostraremos todo
Response.Write "<TABLE BORDER=""1"">" & vbCrLf
' Mostramos los titulos de las columnas... (pueden sacar ese FOR para eliminar eso)
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To RS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD><B>"
Response.Write RS.Fields(I).Name
Response.Write "<B></TD>" & vbCrLf
Next 'I
Response.Write vbTab & "</TR>" & vbCrLf

' Hacemos el bucle mostrando los datos del registro
registro_mostrado = 0
Do While registro_mostrado < mostrar And Not RS.EOF
Response.Write vbTab & "<TR>" & vbCrLf
For I = 0 To RS.Fields.Count - 1
Response.Write vbTab & vbTab & "<TD>"
Response.Write RS.Fields(I)
Response.Write "</TD>" & vbCrLf
Next 'I
Response.Write vbTab & "</TR>" & vbCrLf

' Sumamos 1 a los mostrados
registro_mostrado = registro_mostrado + 1
' Nos movemos al próximo registro...
RS.MoveNext
Loop

'listo...
Response.Write "</TABLE>" & vbCrLf
End If

' Cerramos y limpiamos...
RS.Close
Set RS = Nothing
oConn.Close
Set oConn = Nothing

' Ahora mostramos los enlaces a las otras páginas con el resto de los registros...
If pagina_actual > 1 Then
%>
<a href="./paginar.asp?eje=30&page=<%= pagina_actual - 1 %>">[<< Anterior]</a>
<%
End If

' mostramos la paginacion por numeros de página
For I = 1 To cant_paginas
If I = pagina_actual Then
%>
<%= I %>
<%
Else
%>
<a href="./paginar.asp?eje=30&page=<%= I %>"><%= I %></a>
<%
End If
Next 'I

If pagina_actual < cant_paginas Then
%>
<a href="./paginar.asp?eje=30&page=<%= pagina_actual + 1 %>">[Próximo >>]</a>
<%
End If
'Fin...
%>

Otro ejemplo es el siguiente:

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") & "
"
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,

[<

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="[<< Anterior] "
end if

for contador=1 to maxpagina

If contador>9 then
cero=""
end if

ref=ref & " ref=ref & "'>" & cero & contador & ""
else
ref=ref & "'>" & cero & contador & ""
end if

next

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

ref=ref & " [Siguiente >>]"

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.

tags: conexión asp, paginar en asp, paginar resultados, paginar con ajax, paginador ajax, paginador asp, paginador web, paginar un recordser, asp clasico

En esta sección encontrarás una mezcla de códigos recopilados de fuentes públicas de Internet y otros creados por ASP TEAM. Compartimos recursos útiles de buena fe para formar una base de conocimiento en el desarrollo de aplicaciones en ASP Clásico.