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

Problema con paginación de recordset

Estas en el tema de Problema con paginación de recordset en el foro de ASP Clásico en Foros del Web. Hola a todos, tengo un problema con una paginación de resultados. A ver si me explico bien: Uso una BD Access y tengo una página ...
  #1 (permalink)  
Antiguo 16/12/2004, 06:35
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 21 años, 10 meses
Puntos: 0
Problema con paginación de recordset

Hola a todos, tengo un problema con una paginación de resultados. A ver si me explico bien:
Uso una BD Access y tengo una página en la que muestro resultados (hay de momento 118 resultados). Bien, lo pagino y salen 13 páginas pero no muestra los resultados, se queda en 116, pero en la base de datos sí aparecen. No sé si ha quedado claro, voy a poner el código pero no sé si hay error ahí ya que funciona bien hasta que llega a ese número.

Código PHP:
set conn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Server.MapPath("..\data\db1.mdb")

Dim mostrar
Dim cant_paginas
Dim pagina_actual
Dim registro_mostrado
Dim I

mostrar 
5

If Request.QueryString("page") = "" Then
pagina_actual 
1
Else
pagina_actual CInt(Request.QueryString("page"))
End If

SQL="Select * from seg_mano where poblacion='"&poblacion&"'"

RS.PageSize mostrar
RS
.CacheSize mostrar
RS
.MaxRecords=0
RS
.Open SQLConn,3,1
cant_paginas 
RS.PageCount

If pagina_actual cant_paginas Then pagina_actual cant_paginas
If pagina_actual 1 Then pagina_actual 1

If cant_paginas <> 0 Then

RS
.AbsolutePage pagina_actual

if not rs.eof or not rs.bof then
Do While registro_mostrado mostrar And Not RS.EOF
'Muestro las tablas con los registros
'
....
rs.movenext

registro_mostrado
=registro_mostrado+1        
loop
else
response.write "<tr><td>La base de datos está vacía. Inserte un inmueble de segunda mano y repita esta operación.</td></tr>"
end if

'-------------------------------
'
Ahora pongo la navegación por páginas
'-------------------------------
<%    If pagina_actual > 1 Then %>
  <a href="./mod_seg_mano2.asp?page=<%= pagina_actual - 1 %>&poblacion=<%=poblacion%>"><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><strong>[< Anterior]</strong></font></a>
<%
End If

mostramos la paginacion por numeros de página
For 1 To cant_paginas
If pagina_actual Then
%>
  <%
response.write "<font face=verdana size=1>Página "&I&"</font>" %>
  <%
Else
%>
  <
a href="./mod_seg_mano2.asp?page=<%= I %>&poblacion=<%=poblacion%>"><%= %></a>
  <%
End If
Next 'I

If pagina_actual < cant_paginas Then
%>
  <a href="./mod_seg_mano2.asp?page=<%= pagina_actual + 1 %>&poblacion=<%=poblacion%>"><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><strong>[Próximo >]</strong></font></a>
  <%
End If
'
Fin...
%> 
A ver si me podeis echar una mano ya que parece que por al´gún motivo hay alguna especia de límite a las página a mostrar.

Gracias.
  #2 (permalink)  
Antiguo 17/12/2004, 08:15
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 21 años, 10 meses
Puntos: 0
Por favor, echarme una mano que me urge bastante. La página no muestra más allá de 117 registros, por qué?
  #3 (permalink)  
Antiguo 17/12/2004, 08:36
 
Fecha de Ingreso: diciembre-2004
Ubicación: Bs. As. - Argentina
Mensajes: 200
Antigüedad: 20 años, 5 meses
Puntos: 0
Una pregunta.
¿sabes si te pierde los "ultimos" registros o te va "perdiendo" uno o 2 por hoja?
sin haber mirado MUY a fondo, yo probaría cambiando
Do While registro_mostrado < mostrar And Not RS.EOF
por
Do While registro_mostrado <= mostrar And Not RS.EOF

Espero te sriva
__________________
Javo.
www.thesitewatcher.com
Monitoreo y Auditoría de Sitios de Internet
  #4 (permalink)  
Antiguo 17/12/2004, 08:49
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 21 años, 10 meses
Puntos: 0
Hola javopereira, gracias por contestar. Lo que pasa es que no muestra los últimos, a partir del registro número 117 si añado más no los muestra, pero lo curioso es que sí hace bien el cálculo de las páginas. A ver si me explico, con 117 registros me da 12 páginas, si añado un registro más me pone 13 páginas y en la última página me muestra el último registro. Voy a probar eso que me has dicho, pero me da que no va a servir.

He probado a hacer el cambio que me ha dicho pero nada, lo único que hace es mostrar 6 registros por página. El error tiene que estar en otro sitio pero ahora mismo me ha pillado en "fuera de juego". Alguna ayudita más?

Salu2.

Última edición por knarfy; 17/12/2004 a las 08:51
  #5 (permalink)  
Antiguo 17/12/2004, 09:03
 
Fecha de Ingreso: julio-2003
Mensajes: 116
Antigüedad: 21 años, 10 meses
Puntos: 0
Ya funciona, he cambiado el código de paginación por este:
Código PHP:
Dim mostrar       'cantidad de registros a mostrar por página
Dim cant_paginas      '
cantidad de páginas que recibimos
Dim pagina_actual      
'La página que mostramos
Dim registro_mostrado      '
Contador utilizado para mostrar las páginas
Dim I        
'Variable Loop

mostrar = 6 ' 
Pueden modificar este número para cambiar la cantidad de registros por página

' IF para saber que página mostrar
If Request.QueryString("page") = "" Then
pagina_actual = 1
Else
pagina_actual = CInt(Request.QueryString("page"))
End If

strsql = "SELECT * FROM seg_mano where poblacion='"&poblacion&"' ORDER BY poblacion,id ASC"

Creamos la conexion a la base de datos
Set oConn 
Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Server.MapPath("..\data\db1.mdb")

' Creamos el RecordSet y definimos la cantidad de registros a mostrar
Set RS = Server.CreateObject("ADODB.Recordset")


RS.PageSize = mostrar
RS.CacheSize = mostrar

Abrimos la tabla...
RS.Open strSQLoConn,3,1
'contamos las páginas que se formaron con la variable mostrar.
cant_paginas = RS.PageCount

Si el pedido de página cae afuera del rango,
' lo modificamos para que caiga adentro
If pagina_actual > cant_paginas Then pagina_actual = cant_paginas
If pagina_actual < 1 Then pagina_actual = 1

Si la cantidad de páginas da 0 es que no hay registros... por eso este IF
If 
cant_paginas 0 Then
Response
.Write ""
Else
' Nos movemos a la página elegida
RS.AbsolutePage = pagina_actual
Mostramos el dato de que página estamos...
%> 
y ya me funciona, no tengo ni idea de por qué pero funciona. Ahora mi pregunta es, ¿dónde estaba el error?
  #6 (permalink)  
Antiguo 17/12/2004, 09:16
 
Fecha de Ingreso: diciembre-2004
Ubicación: Bs. As. - Argentina
Mensajes: 200
Antigüedad: 20 años, 5 meses
Puntos: 0
en lineas generales, el cod me parece que esta bien.
yo haria algunas pruebas como para intentar aislar el problema.
que pasa si agregas 5 registros?
Aparece una pagina mas?
¿y si agregas 6? mismo problema pero con una pag mas?

quizas el probelma lo tengamos en las paginas que no tienen todos los regsitros ¿se entiende lo que quiero decir?
Una cosita que no encontré, pero creo que yo soy medio tonto y no la veo, por que de no estar, calculo cancelaría. ¿el registro_morstrado=0? ¿o =1?

otra cosa que yo haria, seria en el caso que "descubramos" que le problema es cuando no hay 5 registros, sino menos, es tirar response.write de las dos condiciones (registro_mostrado < mostrar y Not RS.EOF) porque a simple vista lo primero que creo ocurre es que no esta entrando en el while.
Quizas alguno de los 2 valores en el caso de no tener 5 tiene un valor no esperado.
__________________
Javo.
www.thesitewatcher.com
Monitoreo y Auditoría de Sitios de Internet
  #7 (permalink)  
Antiguo 17/12/2004, 09:18
 
Fecha de Ingreso: diciembre-2004
Ubicación: Bs. As. - Argentina
Mensajes: 200
Antigüedad: 20 años, 5 meses
Puntos: 0
si funciona, festeja y listo......
__________________
Javo.
www.thesitewatcher.com
Monitoreo y Auditoría de Sitios de Internet
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 12:51.