Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2011, 05:59
PabloManuel
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 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.