Paginar resultados con GetRows y ASP clásico

Código ASP clásico

Cuando estamos recuperando registros de una base de datos con ASP clásico, un programador ASP clásico puede experimentar una reducción del performance cuando la tabla contiene demasiados registros. Para agilizar este proceso es posible utilizar getrows. Esta función permite traer todos los registros en una sola petición y almacenarla en una matriz para despúes ser consultada a través de un bucle.

El código ASP clásico para obtener el resultado de una consulta es más ágil para el servidor usando GetRows. A continuación se muestra como paginar resultados con GetRows:
 

<HTML>
<HEAD>
<TITLE>Paginar con GETROWS</TITLE>


<h2><center>Paginar con GetRows</center></h2>
<%
Dim pag, iEstado
Dim oConn, SQL, rs
Dim aDatos, iTotal
Dim I, J

'Nos conectamos a la base de datos...
set oConn = Server.CreateObject("ADODB.Connection")
set rs = Server.CreateObject("ADODB.Recordset")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("ejemplo.mdb")

SQL="SELECT * FROM Ventas"
'Vamos a utilizar el Recordset más eficiente
'CursorType = Forward-Only
rs.CursorType = 0
'LockType = Read-Only
rs.LockType = 1
'CursorLocation = adUseClient
rs.CursorLocation = 3
'Y abrimos el Recordset
rs.Open SQL, oConn
'Obtengo los datos con GetRows
aDatos = rs.GetRows
'Cierro y limpio objetos ya
rs.Close
oConn.Close
set rs = nothing
set oConn = nothing

'Obtengo la página a mostrar de
'la querystring
pag = CInt(Request.QueryString("P"))
'Y llamo a PaginarGR
iEstado = PaginarGR (10, pag, aDatos)


'=====================================================================================
' PaginarGR -- Pagina un vector bidimensional
' vector es el vector a paginar, iPag la página a mostrar y iRegsPorPag el nº de
' registros por cada página que queremos.
'=====================================================================================
Function PaginarGR (iRegsPorPag, iPag, vector)
'
'I, J se utilizan para recorrer el vector
Dim I, J
'Total de páginas y la página que queremos mostrar
Dim iPaginas, iPagActual
'Total de registros, registro en que empezamos y registro en que terminamos
Dim iTotal, iComienzo, iFin

'Hallo el total de registros devueltos
iTotal = UBound(aDatos,2)+1
'Calculo el numero de páginas que tenemos
iPaginas = (iTotal \ iRegsPorPag)
'Si daba decimales, añado una más
'para mostrar los últimos registros
if iTotal mod iRegsPorPag > 0 then
iPaginas = iPaginas + 1
end if
'Si no es una página válida, comienzo en la primera
if iPag < 1 then
iPag = 1
end if
'Si es una página mayor al nº de páginas, comienzo en la última
if iPag > iPaginas then
iPag = iPaginas
end if
Response.Write("Página " & iPag & " de " & iPaginas & " (" & iTotal & " registros)<br>")
'Calculo el índice donde comienzo:
iComienzo = (iPag-1)*iRegsPorPag
'y donde termino:
iFin = iComienzo + (iRegsPorPag-1)
'Si no tengo suficientes registros restantes,
'voy hasta el final
if iFin > UBound(vector, 2) then
iFin = UBound(vector, 2)
end if
'Pinto la tabla
Response.Write("<TABLE BORDER=""1"">")
for I= iComienzo to iFin
Response.Write("<TR>")
for J=0 to UBound(vector,1)
Response.Write("<TD>" & vector(J,I) & "</TD>")

next
next
Response.Write("</TABLE><br><br>")

'Imprimo enlaces, si son necesarios
if iPag > 1 then
Response.Write("<A HREF=""grpaginar.asp?P="&iPag-1&"""><b>Anterior</b></A>&nbsp;&nbsp;")
end if
if iPag < iPaginas then
Response.Write("<A HREF=""grpaginar.asp?P="&iPag+1&"""><b>Siguiente</b></A>&nbsp;")
end if

PaginarGR = 0
End Function
'=====================================================================================
%>

tags: archivo global.asa, archivo global.asax, global.asa file, global.asa include, global.asa iis, global.asa connection string, global.asa is required for all websites

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.