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

Función de paginación : no me funciona.

Estas en el tema de Función de paginación : no me funciona. en el foro de ASP Clásico en Foros del Web. Hola de nuevo, estoy intentando crear una función para paginar Recordset, este es el código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original <% 'Parámetros: ' Sentencia: ...
  #1 (permalink)  
Antiguo 24/10/2011, 05:59
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 4 meses
Puntos: 6
Función de paginación : no me funciona.

Hola de nuevo, estoy intentando crear una función para paginar Recordset, este es el código:

Código HTML:
Ver original
  1. <%
  2. 'Parámetros:
  3. 'Sentencia: Sentencia SQL con la que generar el Recordset
  4. 'Pagina_Solicitada: Página del recordset solicitada para mostrar
  5. 'Mostrar: número de registros por página
  6. '
  7. 'La función crea el Recordset solicitado y devuelve un array:
  8. ' Posición 0 : Páginas totales resultantes
  9. ' Posición 1 : Página en la que se posiciona, esta puede diferir de la
  10. '              solicitada, es decir, si se solicita la página 32 del recordset
  11. '              y sólo hay 28 páginas, el valor será 28.
  12. '              
  13. Function CrearRs_paginado (Sentencia, Pagina_Solicitada, Mostrar)
  14.    
  15.     Dim Devuelve(1)
  16.    
  17.     if Pagina_Solicitada = "" then
  18.         Pagina_Solicitada = 1
  19.     Else
  20.         Pagina_Solicitada=cint(Pagina_Solicitada)
  21.     End if
  22.     if Mostrar = "" then
  23.         Mostrar = 5
  24.     Else
  25.         Mostrar = Cint(Mostrar)
  26.     End if
  27.    
  28.     Set rs=server.createobject("adodb.recordset")
  29.     Rs.pagesize = Mostrar
  30.     Rs.cachesize = Mostrar
  31.    
  32.     Rs.open Sentencia,conn,3,1
  33.     cant_paginas=rs.pagecount
  34.     If Pagina_Solicitada > cant_paginas then
  35.         Pagina_Solicitada = cant_paginas
  36.     end if
  37.                          
  38.     if Pagina_Solicitada <1 then
  39.         Pagina_Solicitada = 1
  40.     end if
  41.          
  42.     If cant_paginas = 0 Then
  43.         CrearRs_paginado = 0
  44.        
  45.         'Cantidad de páginas
  46.         Devuelve(0) = 0
  47.        
  48.         'Página Solicitada
  49.         Devuelve(1) = 0
  50.         CrearRs_paginado = Devuelve
  51.     Else
  52.         Rs.absolutepage = Pagina_Solicitada    
  53.         Devuelve(0) = rs.pagecount
  54.         Devuelve(1) = Pagina_Solicitada
  55.        
  56.         CrearRs_paginado = Devuelve
  57.     End If 
  58.  
  59.  
  60. End Function  
  61.  
  62.  
  63. %>
  64.  
  65. <html xmlns="http://www.w3.org/1999/xhtml">
  66.  
  67.     <head>
  68.         <link href="Estilo.css" rel="stylesheet" type="text/css" />
  69.     </head>
  70.  
  71.  
  72.     <%
  73.     Dim Pags_NumPag(1)
  74.     Pags_NumPag() = CrearRs_Paginado("Select * From Boletines_Subcr", 523, 10)
  75.    
  76.     For I=1 To 10
  77.         If Rs.Eof Then Exit For
  78.  
  79.         %>
  80.         <div><%=Rs("Email")%></div>
  81.         <%
  82.         Rs.MoveNext
  83.  
  84.     Next
  85.    
  86.     Response.Write Pags_NumPag(0) &"<br/>"
  87.     Response.Write Pags_NumPag(1)
  88.     CerrarRs
  89.     %>
  90.  
  91.  
  92.    
  93. </body>
  94.  
  95. </html>

A la función se le pasa la consulta, la página en la que te quieres posicionar y los registros a mostrar por página.

Me tiene que devolver dos valores para poder crear el pie de paginación que son las páginas totales y en número de página en el que se posiciona.

Y por esto último es por lo que necesito el array, porque le puedo pedir la página 100, pero si sólo hay 95 debe devolver 95

De esta manera aunque yo le dé a siguiente repetidamente, el pie quedará así:

Página 25 de 25 | Anterior Siguiente

De momento tan sólo me muestra los resultados. O lo intento, porque me da este error:

Microsoft VBScript runtime error '800a0009'
Subscript out of range
/prueba.asp, line 102


Esta es la línea 102:
Código ASP:
Ver original
  1. Pags_NumPag() = CrearRs_Paginado("Select * From Boletines_Subcr", 523, 10)

Última edición por PabloManuel; 24/10/2011 a las 06:01 Razón: ortografía.
  #2 (permalink)  
Antiguo 24/10/2011, 09:01
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 4 meses
Puntos: 6
Respuesta: Función de paginación : no me funciona.

La línea 45:
Código ASP:
Ver original
  1. CrearRs_paginado = 0

Hay que eliminarla, la he quitado pero el error sigue siendo el mismo.
  #3 (permalink)  
Antiguo 24/10/2011, 09:43
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 4 meses
Puntos: 6
Respuesta: Función de paginación : no me funciona.

Solucionado:

Función:
Código ASP:
Ver original
  1. <%
  2. 'Parámetros:
  3. 'Sentencia: Sentencia SQL con la que generar el Recordset
  4. 'Pagina_Solicitada: Página del recordset solicitada para mostrar
  5. 'Mostrar: número de registros por página
  6. '
  7. 'La función crea el Recordset solicitado y devuelve un array:
  8. ' Posición 0 : Páginas totales resultantes
  9. ' Posición 1 : Página en la que se posiciona, esta puede diferir de la
  10. '              solicitada, es decir, si se solicita la página 32 del recordset
  11. '              y sólo hay 28 páginas, el valor será 28.
  12. '              
  13. Function CrearRs_paginado (Sentencia, Pagina_Solicitada, Mostrar)
  14.    
  15.     Dim Devuelve(1)
  16.    
  17.     if Pagina_Solicitada = "" then
  18.         Pagina_Solicitada = 1
  19.     Else
  20.         Pagina_Solicitada=cint(Pagina_Solicitada)
  21.     End if
  22.  
  23.     if Mostrar = "" then
  24.         Mostrar = 5
  25.     Else
  26.         Mostrar = Cint(Mostrar)
  27.     End if
  28.    
  29.     Set rs=server.createobject("adodb.recordset")
  30.     Rs.pagesize = Mostrar
  31.     Rs.cachesize = Mostrar
  32.    
  33.     Rs.open Sentencia,conn,3,1
  34.     cant_paginas=rs.pagecount
  35.  
  36.     If Pagina_Solicitada > cant_paginas then
  37.         Pagina_Solicitada = cant_paginas
  38.     end if
  39.                          
  40.     if Pagina_Solicitada <1 then
  41.         Pagina_Solicitada = 1
  42.     end if
  43.            
  44.     If cant_paginas = 0 Then
  45.        
  46.         'Cantidad de páginas
  47.         Devuelve(0) = 0
  48.        
  49.         'Página Solicitada
  50.         Devuelve(1) = 0
  51.         CrearRs_paginado = Devuelve
  52.        
  53.     Else
  54.    
  55.         Rs.absolutepage = Pagina_Solicitada    
  56.         Devuelve(0) = rs.pagecount
  57.         Devuelve(1) = Pagina_Solicitada
  58.         CrearRs_paginado = Devuelve
  59.        
  60.     End If 
  61.  
  62.  
  63. End Function  
  64. %>
En el documento:

Código HTML:
Ver original
  1.  
  2.     <%
  3.  
  4.     Pags_NumPag = CrearRs_Paginado("Select * From Boletines_Subcr", 523, 10)
  5.    
  6.     For I=1 To 10
  7.         If Rs.Eof Then Exit For
  8.  
  9.         %>
  10.         <div><%=Rs("Email")%></div>
  11.         <%
  12.         Rs.MoveNext
  13.  
  14.     Next
  15.    
  16.     Response.Write Pags_NumPag(0) &"<br/>"
  17.     Response.Write Pags_NumPag(1)
  18.     CerrarRs
  19.     %>
  20.  
  21.  
  22.    
  23. </body>

Como veis, se le dice que muestre la página 523, paginando de 10 en 10, pero tan sólo hay 253 páginas, por lo tanto devuelve una posición 253 de 253 páginas.

PD. A ver si dejo de ser tan vago y uso Option Explicit.

Última edición por PabloManuel; 24/10/2011 a las 09:43 Razón: error.

Etiquetas: asp, paginar
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 14:40.