Foros del Web » Programando para Internet » ASP Clásico »

Ayuda con Paginar resultados (función de 3pies)

Estas en el tema de Ayuda con Paginar resultados (función de 3pies) en el foro de ASP Clásico en Foros del Web. hola intento adaptar la función de 3pies de paginar resultados en asp a una busqueda que hago en la base de datos y no consigo ...
  #1 (permalink)  
Antiguo 15/10/2006, 03:23
Avatar de Laika  
Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 22 años, 7 meses
Puntos: 0
Ayuda con Paginar resultados (función de 3pies)

hola intento adaptar la función de 3pies de paginar resultados en asp a una busqueda que hago en la base de datos y no consigo que me funcione. Este es el codigo. haber si me podeís ayudar.

En el While calculo el valor de la variable PaginasTotales.

Cita:
function mostrar_resultados()

on error resume next

'Si se busca con la caja de texto vacia
if request.QueryString("criterio") = "" then
response.Write("Debe escribir algun criterio de búsqueda")
exit function
end if

sql="SELECT * from tabla1 WHERE campo1 like '%"&Request.QueryString("criterio")&"%' AND campo2 <> '' "

sqlvalido=true
if sqlvalido then

Set Conn = Createobject("ADODB.Connection")
Set rs = CreateObject ("ADODB.RecordSet")
conn.open "bdatos"
rs.open sql,conn

%>


<table width="567" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">

<tr>
<td align="center">

<br /><br />

<%do while not rs.eof

%>

<table width="541" border="0" align="center" cellpadding="0" cellspacing="0" class="tabla_resultados3">
<tr>
<td width="60%" valign="top"><table width="348" cellspacing="0" cellpadding="0" border="0" class="textoencabficha">
<tr>
<td width="358"><div align="left" class="texto_nombrefq"><%=Ucase(rs("campo4"))%></div></td>
</tr>
<tr>
<td><br><div align="left"><%=rs("campo5")%></div></td>
</tr>
<tr>
<td><br><div align="left">Total: <%=rs("campo6")%></div>
<p></p></td>
</tr>
<tr>
<td><br><div align="left"><a href="ficha.asp?id=<%=rs("id")%>" class="texto_protec_datos">ver mas...</a></div>
<p></p></td>
</tr>
</table></td>
<td width="40%" align="left" valign="top"><table width="214" border="0">
<tr>
<td width="213" height="152"><div align="left"><a href="ficha.asp?id=<%=rs("id")%>"><img src="imagenes/<%=rs("logo")%>" alt="<%=rs("campo6")%>" width="150" border="0" align="right" /></a> </div></td>
</tr>
</table></td>
</tr>
</table> <br />
<%
PaginasTotales=PaginasTotales+1

rs.movenext
loop

%>

</td>
</tr>
</table>


<%

'Modificar el contenido de las constantes para cambiar el aspecto de la barra de navegación
const EstiloDeLaTabla = "border: 1px solid #D6AD6B; font-family: Arial, Helvetica, sans-serif; font-size: 10px;"
const EstiloCeldaPaginaXdeY = "color: #846B42; background-color: #D6AD6B;"
const LinkDelEnlace = "resultados.asp?Request.QueryString("criterio" )"
const EstiloDeLaCeldaPaginaActual = "background-color:#EFD6AD; font-weight:bold;"
const EstiloDeLaCeldaPaginaConLink = "background-color:#F7E7C6"

if PaginasTotales > 1 then
if PaginasTotales > 5 then MostrarUltima = true
TablaConBarraDeNavegacion = "<table border=""0"" cellpadding=""2"" cellspacing=""1"" style=""" & EstiloDeLaTabla & """><tr><td style=""" & EstiloCeldaPaginaXdeY & """>&nbsp; P&aacute;gina " & PaginaActual & " de " & PaginasTotales & "&nbsp;&nbsp;</td>"
if PaginaActual >= 4 then
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=1"" class=""" & LinkDelEnlace & """><strong>«</strong> Primera</a></td>"
CantidadAMostrarDeAnterioresYPosteriores = 2
'Indicamos la celda central como activa, y sin link
'(la 3ª, de las 5 mostradas), y el resto con link
for i = 1 to 5
'No mostramos link si estamos en la 3ª celda de las 5 mostradas
if i = 3 then
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style=""" & EstiloDeLaCeldaPaginaActual & """>" & PaginaActual & "</td>"
else
'Mostramos el link si estamos en las celdas distintas de la 3ª (la central)
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style=""" & EstiloDeLaCeldaPaginaConLink & """><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & PaginaActual - CantidadAMostrarDeAnterioresYPosteriores & """ class=""" & LinkDelEnlace & """>" & PaginaActual - CantidadAMostrarDeAnterioresYPosteriores & "</a></td>"
end if

if PaginaActual - CantidadAMostrarDeAnterioresYPosteriores = PaginasTotales then
MostrarUltima = False
Exit For
end if

CantidadAMostrarDeAnterioresYPosteriores = CantidadAMostrarDeAnterioresYPosteriores - 1
next
else
if PaginasTotales < 5 then
for i = 1 to PaginasTotales
if i <> PaginaActual then
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & i & """ class=""" & LinkDelEnlace & """>" & i & "</a></td>"
else
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaActual &""">" & i & "</td>"
end if
next
else
For i = 1 to 5
if i <> PaginaActual then
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & i & """ class=""" & LinkDelEnlace & """>" & i & "</a></td>"
else
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaActual &""">" & i & "</td>"
end if
next
end if
end if

if MostrarUltima = true then TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & PaginasTotales & """ class=""" & LinkDelEnlace & """>&Uacute;ltima <strong>»</strong></a></td>"
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "</tr></table>"
BarraDeNavegacion = TablaConBarraDeNavegacion
end if %>


<p>&nbsp;</p>

<p>&nbsp;</p>


<%
end if
conn.close

end function
  #2 (permalink)  
Antiguo 15/10/2006, 03:26
Avatar de Laika  
Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 22 años, 7 meses
Puntos: 0
Se me olvidó poneros antes de acabar la función esto:

<%=BarraDeNavegacion(PaginasTotales, PaginaActual)%>

Haber si me podeís ayudar.

Gracias
  #3 (permalink)  
Antiguo 16/10/2006, 05:00
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 5 meses
Puntos: 144
Antes de nada, comentar que la función original es del master Al_Zuwaga. Yo solo la afiné un poquillo...

Laika, para paginar correctamente, te faltan bastantes cosas. No he podido probar tu código, pero más o menos sería esto (perdón si falta algo). Creo que lo que está en rojo, es lo que debes poner para paginar, y lo que está en verde, es la barra de navegación que se verá al pie de la página.

Yo pondría la función en un include, pero en este ejemplo, está todo junto...

Código:
 
<%
'Si se busca con la caja de texto vacia
if request.QueryString("criterio") = "" then
     response.Write("Debe escribir algún criterio de búsqueda")
'Si hay datos en el criterio de selección...
else
 
     'Ponemos la función para la barra de navegación
     Function BarraDeNavegacion(PaginasTotales, PaginaActual)
           'Modificar el contenido de las constantes para cambiar el aspecto de la barra de navegación
const EstiloDeLaTabla = "border: 1px solid #D6AD6B; font-family: Arial, Helvetica, sans-serif; font-size: 10px;"
           const EstiloCeldaPaginaXdeY = "color: #846B42; background-color: #D6AD6B;"
           const LinkDelEnlace = "link1"
           const EstiloDeLaCeldaPaginaActual = "background-color:#EFD6AD; font-weight:bold;"
           const EstiloDeLaCeldaPaginaConLink = "background-color:#F7E7C6"
 
           if PaginasTotales > 1 then
                 if PaginasTotales > 5 then MostrarUltima = true      
                 TablaConBarraDeNavegacion = "<table border=""0"" cellpadding=""2"" cellspacing=""1"" style=""" & EstiloDeLaTabla & """><tr><td style=""" & EstiloCeldaPaginaXdeY & """>&nbsp; P&aacute;gina " & PaginaActual & " de " & PaginasTotales & "&nbsp;&nbsp;</td>"
 
                 if PaginaActual >= 4 then
                       TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=1"" class=""" & LinkDelEnlace & """><strong>«</strong> Primera</a></td>"
CantidadAMostrarDeAnterioresYPosteriores = 2
                       'Indicamos la celda central como activa, y sin link
                       '(la 3ª, de las 5 mostradas), y el resto con link
                       for i = 1 to 5
                            'No mostramos link si estamos en la 3ª celda de las 5 mostradas
                            if i = 3 then
                                  TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style=""" & EstiloDeLaCeldaPaginaActual & """>" & PaginaActual & "</td>"
                            else
                            'Mostramos el link si estamos en las celdas distintas de la 3ª (la central)
                                  TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style=""" & EstiloDeLaCeldaPaginaConLink & """><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & PaginaActual - CantidadAMostrarDeAnterioresYPosteriores & """ class=""" & LinkDelEnlace & """>" & PaginaActual - CantidadAMostrarDeAnterioresYPosteriores & "</a></td>"
                            end if
 
                            if PaginaActual - CantidadAMostrarDeAnterioresYPosteriores = PaginasTotales then
                                  MostrarUltima = False
                                  Exit For
                            end if
 
                            CantidadAMostrarDeAnterioresYPosteriores = CantidadAMostrarDeAnterioresYPosteriores - 1
next
                 else
                       if PaginasTotales < 5 then
                            for i = 1 to PaginasTotales
                                  if i <> PaginaActual then
                                        TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & i & """ class=""" & LinkDelEnlace & """>" & i & "</a></td>"
else
                                        TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaActual &""">" & i & "</td>"
end if
                            next
                       else
                            For i = 1 to 5
                                  if i <> PaginaActual then
                                        TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & i & """ class=""" & LinkDelEnlace & """>" & i & "</a></td>"
else
                                        TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td width=""15"" align=""center"" style="""& EstiloDeLaCeldaPaginaActual &""">" & i & "</td>"
end if
                            next
                       end if
                 end if
 
                 if MostrarUltima = true then TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "<td style="""& EstiloDeLaCeldaPaginaConLink &"""><a href="""& PaginaActualBarraDeNavegacion & "?pagina=" & PaginasTotales & """ class=""" & LinkDelEnlace & """>&Uacute;ltima <strong>»</strong></a></td>"
TablaConBarraDeNavegacion = TablaConBarraDeNavegacion & "</tr></table>"
                 BarraDeNavegacion = TablaConBarraDeNavegacion
end if
     end Function 
  #4 (permalink)  
Antiguo 16/10/2006, 05:01
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 5 meses
Puntos: 144
Parte 2:
Código:
'Paginación de los resultados:
    Dim mostrar 'cantidad de registros a mostrar por página                     
    Dim cant_paginas 'cantidad de páginas que recibimos de la base de datos
    Dim pagina_actual 'la página que mostramos
    Dim registro_mostrado 'contador utilizado para mostrar los registros en las páginas
    Dim i 'variable loop
    'Podemos modificar este número que ponemos a continuación,
    'para cambiar la cantidad de registros a mostrar en cada página
    mostrar = 10
    'Utilizamos el IF para saber que página mostrar,
    'dependiendo de lo que muestre el querystring
If Request.QueryString("pagina") = "" or not isNumeric(Request.QueryString("pagina")) Then
pagina_actual = 1
    Else
          pagina_actual = CInt(Request.QueryString("pagina"))
    End If
 
    'Definimos la cantidad de registros a mostrar por página
    'puesto que estamos paginando los registros
rs.PageSize = mostrar
    rs.CacheSize = mostrar
 
    Set Conn = Createobject("ADODB.Connection")
    Set rs = CreateObject ("ADODB.RecordSet")
    sql="SELECT * from tabla1 WHERE campo1 like '%"&Request.QueryString("criterio")&"%' AND campo2 <> '' "
    conn.open "bdatos"
    rs.open sql,conn, 1, 3
 
    'contamos las páginas que se formaron con la variable mostrar,
    'pues estamos paginando los registros
    cant_paginas = rs.PageCount
    'si el pedido de página cae afuera del rango,
    'lo modificamos para que caiga dentro
    If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
    If pagina_actual < 1 Then pagina_actual = 1
    'Creamos una variable para contar los productos, noticias, o lo que sea que tengamos en la base de datos
    totalregistros=rs.RecordCount
    'Para mostrar los resultados por registros
    if pagina_actual<>cint(rs.pagecount) then 'si no es la última página
          hasta=pagina_actual*10 'debe ser igual que la variable "mostrar"
          desde=hasta-9 'uno menos que los registros que figuran en la variable "mostrar"
    else
          hasta=rs.recordcount
          desde=(cint(rs.pagecount)*10)-9 '10 y 9, según se indica en las líneas anteriores
    end if
 
    'Si tenemos datos para mostrar...
If Not rs.EOF or cant_paginas > 0 then
'nos movemos a la página elegida, pues estamos paginando
          rs.AbsolutePage=pagina_actual
%> 
  #5 (permalink)  
Antiguo 16/10/2006, 05:02
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 5 meses
Puntos: 144
Parte 3:
Código:
         <table width="567" cellspacing="0" cellpadding="0" border="0">
<tr>
               <td width="75%">
                     Mostrando desde el art&iacute;culo, noticia, o lo que sea <%=FormatNumber(desde,0,,,-1)%> al <%=FormatNumber(hasta,0,,,-1)%>, de un total de <%=FormatNumber(totalregistros,0,,,-1)%>
</td>
               <td width="25%" align="right">
P&aacute;gina <%=pagina_actual%> de <%=cant_paginas%>
</td>
               </tr>
         </table>
         <br/><br/>
         <table width="567" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
               <tr>
               <td align="center">
               <br/><br/>
<%
               'Montamos el bucle para mostrar los registros
registro_mostrado = 0
               Do while registro_mostrado < mostrar and not rs.eof
               %> 
                     <table width="541" border="0" align="center" cellpadding="0" cellspacing="0" class="tabla_resultados3">
                          <tr>
                          <td width="60%" valign="top">
                                <table width="348" cellspacing="0" cellpadding="0" border="0" class="textoencabficha">
                                      <tr>
                                      <td width="358"><div align="left" class="texto_nombrefq"><%=Ucase(rs("campo4"))%></div></td>
                                      </tr>
                                      <tr>
                                      <td><br><div align="left"><%=rs("campo5")%></div></td>
                                      </tr>
                                      <tr>
                                      <td><br><div align="left">Total: <%=rs("campo6")%></div>
                                      <p></p></td>
                                      </tr>
                                      <tr>
                                      <td><br><div align="left"><a href="ficha.asp?id=<%=rs("id")%>" class="texto_protec_datos">ver mas...</a></div>
                                      <p></p></td>
                                      </tr>
                                </table>
                          </td>
                          <td width="40%" align="left" valign="top">
                                <table width="214" border="0">
                                      <tr>
                                      <td width="213" height="152"><div align="left"><a href="ficha.asp?id=<%=rs("id")%>"><img src="imagenes/<%=rs("logo")%>" alt="<%=rs("campo6")%>" width="150" border="0" align="right" /></a> </div>
                                      </td>
                                      </tr>
                                </table>
                          </td>
                          </tr>
</table> 
                     <br/>
 
               <%
               'sumamos 1 al registro mostrado
 registro_mostrado = registro_mostrado + 1
               'nos movemos al próximo registro
rs.MoveNext
               Loop
               %>
               </td>
               </tr>
</table>
 
   <%
   'en el caso de que no haya registros en la BD, mostramos un mensaje
else
   %>
         <table width="567" cellspacing="0" cellpadding="0" border="0">
<tr>
               <td align="center">
                     No hay registros en la base de datos.
               </td>
               </tr>
         </table>
   <%
   'finalizamos el condicional
   end if
 
   'Cerramos y limpiamos todo
Conn.close
   rs.close
   Set Conn = nothing
   Set rs = nothing
   %>
   <table width="567" border="0" cellpadding="0" cellspacing="0">
<tr><td align="center">
 <%=BarraDeNavegacion(cant_paginas, pagina_actual)%>
         </td></tr>
   </table>
<%
'finalizamos el condicional
end if
%> 
Creo que no me he dejado nada...

Siento que el código no esté bien alineado, y no se puedan leer los condicionales, y demás, correctamente, pero el foro me lo ha cambiado (yo lo había puesto bien).

Junta las 3 partes, y listo. Espero que te funcione.

Salu2
  #6 (permalink)  
Antiguo 16/10/2006, 15:08
Avatar de Laika  
Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 22 años, 7 meses
Puntos: 0
Error

Lo que he hecho es: en una página donde tengo varias funciones he añadido la función BarraDeNavegacion y el otro código, lo he metido entre etiquetas Function para tener una nueva función que le he llamado mostrar_resultados.

En la página donde se busca se ejecuta mostrar_resultados (y esta función a su vez, según el código que me has puesto, llama a "BarradeNavegacion" que está en la misma página de funciones. (ambas las cargo con un include).

Al ejecutarlo me da este error en la linea que pongo en negrita:

Set Conn = Createobject("ADODB.Connection")
Set rs = CreateObject ("ADODB.RecordSet")

sql="SELECT * from tabla1 WHERE campo1 like '%"&Request.QueryString("criterio")&"%' AND campo2 <> '' "

conn.open "bdatos"
rs.open sql,conn, 1, 3

rs.CacheSize = mostrar


Tipo de error:
ADODB.Recordset (0x800A0BB9)
Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros.

  #7 (permalink)  
Antiguo 17/10/2006, 02:50
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 5 meses
Puntos: 144
Solucionado los varios problemillas que había, aquí te cuelgo la solución.

Salu2
  #8 (permalink)  
Antiguo 17/10/2006, 15:31
Avatar de Laika  
Fecha de Ingreso: octubre-2001
Mensajes: 1.376
Antigüedad: 22 años, 7 meses
Puntos: 0
Gracias 3pies funciona a la perfección

Es justo lo que quería.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:28.