paginacion con classes, correccion del viejo
create un class.asp:
<%
Class paginado
Public pagina
Public cnn
Public error
Public por_pagina
Public total_registros
Public consulta
Public orden_lista
Public rs
Public desde
Public encabezado
Public ancho_encabezado
Public alineacion
Public ancho
Function paginar()
If IsEmpty(Me.cnn) then
paginar = False
Err.Description = "No Conection with the Database"
Exit Function
End if
If isEmpty(Me.consulta) then
paginar = False
Err.Description = "No se especificó la consulta sobre la Base de Datos"
Exit Function
End if
'VALORES POR DEFECTO
Me.pagina = Request.ServerVariables("URL")
If isEmpty(Me.por_pagina) then
Me.por_pagina = 50
End if
If isEmpty(Me.desde) then
Me.desde = 0
End if
If isEmpty(Me.alineacion) then
Me.alineacion = "center"
End if
If isEmpty(Me.ancho) then
Me.ancho = "100%"
End if
'FIN DE VALORES POR DEFECTO
set Me.rs = Server.CreateObject("ADODB.Recordset")
Me.rs.Open Me.consulta,Me.cnn,3,1
Me.total_registros = Me.rs.RecordCount
ban_error = 0
If Me.total_registros > 0 then
Me.rs.Move Me.desde
inicio = Me.rs.Bookmark
table = Me.rs.GetRows(Me.por_pagina,inicio)
else
ban_error = 1
end if
Me.rs.Close()
set Me.rs = Nothing
If ban_error <> 1 then
encabezado = split(Me.encabezado,",")
ancho_enc = split(Me.ancho_encabezado,",")
orden_lista = split(Me.orden_lista,",")%>
<table border=0 align="<%=Me.alineacion%>" width="<%=Me.ancho%>">
<tr>
<%For k=0 to Ubound(encabezado)%>
<td bgcolor="#FFFFCC" width="<%=ancho_enc(k)%>" align="center">
<font size='1' face='verdana'><b><a href="<%=Me.pagina%>?orden=<%=orden_lista(k)%>"><% =encabezado(k)%></a></font></b>
</td>
<%Next%>
</tr>
</table>
<table border=0 align="<%=Me.alineacion%>" width="<%=Me.ancho%>">
<%For i=0 to Ubound(table,2)
Response.Write("<tr>")
For j=0 to Ubound(table,1)
Response.Write "<td width=" & ancho_enc(j) &"><font size='1' face='verdana'>"
if j=0 then
response.write "<a href='customers.asp?id="&table(0,i)&"'>"
end if
if j=3 then
response.write "<a href='mailto:"&table(3,i)&"'>"
end if
response.write table(j,i) & "</a></font></td>"
Next
Response.Write("</tr>")
Next
Response.Write("</table>")
If Ubound(table,2)+1 < Me.total_registros then
'En caso afirmativo calculamos el nº de páginas que tenemos
'y luego mostramos los links a las demás páginas
If (Me.total_registros mod Me.por_pagina) = 0 then
nro_paginas = Int(Me.total_registros / Me.por_pagina)
else
nro_paginas = Int(Me.total_registros / Me.por_pagina) + 1
end if%>
<table border=0 width="<%=Me.ancho%>" align="<%=Me.alineacion%>" cellspacing=0>
<tr>
<td bgcolor="#EEEEEE" > <strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">
<%'Acá mostramos los links de la forma: Página 1 | 2 | 3 | 4 ...%>
Page
<%For i=0 to nro_paginas-1%>
<%If Me.desde = i*Me.por_pagina then%>
<font title="Page"><%=i+1%></font></font> <font size="1" face="Verdana, Arial, Helvetica, sans-serif">
<%else%>
<a href="<%=Me.pagina%>?orden=<%=session("orden_lista ")%>&ref=<%=i*Me.por_pagina%>" class="e" title="go to page <%=i+1%>"><%=i+1%></a>
<%end if%>
<%If i < nro_paginas-1 then
Response.Write(" | ")
end if
Next%>
</font></strong></td>
<td bgcolor="#EEEEEE"> <strong><font size="2" face="Arial, Helvetica, sans-serif">
<%
a = Me.desde + Me.por_pagina
b = Me.desde - Me.por_pagina
if (Me.desde = 0) and (Ubound(table,2)+1 < Me.total_registros) then%>
<a href="<%=Me.pagina%>?orden=<%=session("orden_lista ")%>&ref=<%=a%>" title="See <%=Me.por_pagina%> Next" class="e">Next
>></a>
<%end if
if (Me.desde+Me.por_pagina < Me.total_registros) and (Me.desde <> 0) then%>
<a href="<%=Me.pagina%>?orden=<%=session("orden_lista ")%>&ref=<%=b%>" title="See <%=Me.por_pagina%> Back" class="e"><<
Back</a> | <a href="<%=Me.pagina%>?ref=<%=a%>" title="See <%=Me.por_pagina%> Next" class="e">Next
>></a>
<%elseif (Me.desde <> 0) then%>
<a href="<%=Me.pagina%>?orden=<%=session("orden_lista ")%>&ref=<%=b%>" title="See <%=Me.por_pagina%> Back" class="e"><<
Back</a>
<%end if%>
</font></strong></td>
</tr>
</table>
<%end if
End if
End Function
End Class%>
luego donde vas a paginar:
<%
orden=request.querystring("orden")
if orden="" or orden=null then
orden="regdate"
end if
session("orden_lista")=orden
strConnection = "DSN=xxxxx;UID=xxxxx;PWD=xxxxx"
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConnection
set rs = new paginado
rs.cnn = cnn '* Conexión a la base de datos
if custo<>"" then
rs.consulta = "SELECT custid, fname,lname, email, country, referencias,regdate FROM customers where fname like '%"&custo&"%' or lname like '%"&custo&"%' or email like '%"&custo&"%'"
else
rs.consulta = "SELECT custid, fname,lname, email, country, referencias,regdate FROM customers order by "&orden&" desc"
end if
rs.desde = Int(Request.Querystring("ref")) '* Registro desde donde comienza el paginado, dejar como está
rs.por_pagina = 50 'Cantidad de Registros por página (10 por defecto)
rs.encabezado = "Id,Name,Lastname,Email,Country,Reference,Registed " '*Texto de cada Columna de datos
rs.orden_lista = "custid,fname,lname,email,country,referencias,regd ate"
rs.ancho_encabezado = "3%,5%,5%,15%,10%,15%,15%" '*Ancho de cada Columna de datos (pixeles o porcentaje)
rs.alineacion = "center" 'Alineación de la tabla que muestra los datos ("center" por defecto)
rs.ancho = "90%" 'Ancho de la tabla que muestra los datos (100% por defecto)
rs.paginar() '* Método que realiza la paginación y genera la tabla
If Err.Description <> "" then%>
<center>
<font class=texto_error><b>Error</b>: <%=Err.Description%></font>
</center>
<br>
<%end if
set rs = Nothing
%>