¿Cómo puedo hacer que una consulta a una base de datos se formatee por pantalla de forma limitada?

Tengo una bdd con bastantes entradas, supongamos unas 100. Hago la conexión y las muestro perfectamente, con todos sus campos etc. Pero tengo una duda. ¿Cómo puedo hacer para por ejemplo mostrar 10 entradas por página y poner abajo "página 1 2 3 4 5..." tantas páginas como haga falta?
He pensado en una variable contador, pero es que no se casi nada de asp y vengo del js. Ayudame por favor.
Respuesta
1
Paginar a través de registros se hace utilizando únicamente propiedades del objeto Recordset. En concreto, utilizamos las siguientes:
PageSize: Define el nº de filas que forman una página. Para que aparezcan de 10 en 10, hay que ponerlo a 10.
CacheSize: Define el nº de filas que el Recordset va a pre-almacenar. Ponemos 10 también para no gastar memoria innecesaria. Si no pusiéramos nada, estaríamos trayendo (por ejemplo) 100 filas para sólo mostrar 10.
PageCount: Nos dice cuántas páginas tenemos en función del tamaño de cada página que hemos puesto arriba, con PageSize. Esto es, nos devuelve el nº de registros que devuelve la búsqueda divido por PageSize.
AbsolutePage: Dirige el Recordset a la página que especifiquemos. Esta es la propiedad que permite "navegar" por los registros, y la que tendremos que modificar para avanzar o retroceder.
NOTA:Aunque definamos el nº de registros por página, tenemos que controlar nosotros cuántos registros imprimimos. Si no llevamos una cuenta, imprimirá siempre hasta el final de la tabla.
La tabla que vamos a utilizar tiene la siguiente forma:
Campo Tipo
Id Autonumérico
Nombre Texto
Ventas Entero largo
Podría representar, por ejemplo, las ventas por empleado de una empresa con vocación comercial. (La verdad es que no había pensado en eso en absoluto, pero creo que debía daros una buena razón!)
¿Qué va a hacer nuestro script?
Lee de la Querystring la página para mostrar. Si no se especifica, como ocurre al cargar el script por primera vez, toma la página 1 como actual.
Creamos nuestros objetos de conexión, etc. y ponemos rs. AbsolutePage con el valor del apartado anterior.
Mostramos el recorset.
Imprimimos los enlaces "Anterior", "Siguiente", si procede. Si está en la primera página, no vamos a ponerle "Anterior", ¿no?
Sólo falta especificar que para el ejemplo uso una base de datos Access. Funciona exactamente igual con cualquier otra base de datos. Vamos a ver código!
<%
Dim oConn, rs, SQL
Dim PaginaActual ' en qué pagina estamos
Dim PaginasTotales ' cuántas páginas tenemos
Dim TamPagina ' cuantos registros por pagina
Dim CuantosRegistros ' la cuenta que os he mencionado
'MODIFICAR AQUI PARA CAMBIAR EL Nº DE REGISTRO POR PAGINA
TamPagina=10
'Leemos qué página mostrar. La primera vez será la inicial
if Request.Querystring("pagina")="" then
PaginaActual=1
else
PaginaActual=CInt(Request.Querystring("pagina"))
end if
Creamos los objetos y definimos las propiedades del Recordset.
set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
' Conexión por OLEDB
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source="&Server.MapPath("ejemplo.mdb")&";"
SQL="SELECT Id, Nombre, Ventas FROM Ventas;"
' Defino el tamaño de las páginas
rs.PageSize=TamPagina
rs.CacheSize=TamPagina
' Abro el recordset
rs.Open SQL, oConn, 1, 2
'Cuento las páginas
PaginasTotales=rs.PageCount
'Compruebo que la pagina actual está en el rango
if PaginaActual < 1 then
PaginaActual = 1
end if
if PaginaActual > PaginasTotales then
PaginaActual = PaginasTotales
end if
Vamos a entrar ya en la paginación propiamente dicha. Primero comprobamos que la consulta nos ha devuelto datos, y luego paginamos. Llevamos en CuantosRegistros la cuenta del nº de filas que hemos sacado. Cuando llevemos TamPagina filas (10 en este caso), nos detenemos.
'Por si la consulta no devuelve registros!
if PaginasTotales=0 then
Response.Write("No se encontraron resultados.")
else
'Vamos a paginar
rs.AbsolutePage=PaginaActual
Response.Write("Pagina " & PaginaActual & " de " & PaginasTotales)
Response.Write("<br><br>")
Response.Write("<TABLE BORDER=""1"" ALIGN=""center"">")
Response.Write("<TR><TD COLSPAN=""3""><B>RESULTADOS</B></TD>")
CuantosRegistros=0
do while not rs.EOF and CuantosRegistros < TamPagina
'Pinto una línea de la tabla por cada registro
Response.Write("<TR>"&VbCrLf)
Response.Write("<TD>"&rs.Fields("Id")&"</TD>")
Response.Write("<TD>"&rs.Fields("Nombre")&"</TD>")
Response.Write("<TD>"&rs.Fields("Ventas")&"</TD>")
Response.Write("</TR>")
CuantosRegistros=CuantosRegistros+1
rs.MoveNext
loop
Response.Write("</TABLE>")
end if
rs.Close
oConn.Close
set rs=nothing
set oConn=nothing
Ya hemos terminado, nos falta poner los enlaces para avanzar o retroceder. Vamos a ello:
'Muestro los enlaces
Response.Write("<hr>")
if PaginaActual > 1 then
Response.Write("<A HREF=rspagina.asp?pagina="& PaginaActual-1& _
">10 Anteriores</A> ")
end if
if PaginaActual < PaginasTotales then
Response.Write("<A HREF=rspagina.asp?pagina=" & PaginaActual+1 & _
">10 Siguientes</A>")
end if
%>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas