Paginar con ASP desde una consulta

He visitado muchas páginas en internet sobre el tema de paginar en ASP... Pero además de por el hecho de que estoy empezando.. Creo que no se explica correctamente el funcionamiento...
Tengo una página ASP (buscadorlibros.asp) desde la que a través de un formulario, se envían datos de una consulta con método POST y con ACTION a una página ASP de resultados (resultadoslibros.asp)...
El código que he adjuntado a la página de resultados, me crea una tabla por cada registro que encuentre... Pero claro, sin paginar... Y bueno, la base de datos de los libros tendrá aproximadamente 2000 registros... Por ahora sólo hay 80.. Pero cuando adjuntemos los 2000 las búsquedas pueden ser interminables...
Bueno... El código que he intentado adaptar a mi buscador es el de este enlace http://www.soloasp.com.ar/vereje.asp?eje=30
El ejemplo funciona correctamente.. Pero claro.. Intento adaptarlo a mi página y me dice que nanai je je... Entonces... Si lo necesitas, puedo enviarte las dos páginas de mi buscador para que lo veas mejor... De todas formas, te pego aquí el código de la página de resultados, a ver si me puedes echar una mano...
<%
On Error Resume Next
Set Conexion = CreateObject("ADODB.Connection")
Conexion.Open "DatosPRO"
strSQL = "Select Count(*) AS Contador from Libros where Titulo like '%" & Request("Nombre") & "%' OR Desc_corta like '%" & Request("Nombre") & "%'"
Set miConexion = Conexion.Execute(strSQL)
If Err.Description <> "" then
Response.Write "<B>Error en Base de Datos: " & Err.Description & "</B>"
Else
If miConexion("Contador") = 0 then
Response.Write "<FONT FACE=Verdana SIZE=3>No se han encontrado registros con el nombre <br><B><FONT COLOR=Red>" & Request("Nombre") & "</FONT></B><BR>Inténtelo de nuevo.</FONT><BR>"
Response.Write "<A HREF='BuscadorLibros.asp'><IMG BORDER=0 SRC='Images\BuscadorWeb.gif'></A>"
Else
strSQL = "Select Titulo, Desc_corta, Autores, URL from Libros where Titulo like '%" & Request("Nombre") & "%' OR Desc_corta like '%" & Request("Nombre") & "%'"
Set miConexion = Conexion.Execute(strSQL)
If Err.Description <> "" then
Response.Write "<B>Error en Base de Datos: " & Err.Description & "</B>"
Else
Dim intContador
intContador = 0
Response.Write "<font face=Tahoma size=3><B><font color=blue><div align=center>R E S U L T A D O S</div></font></font>"
Do While Not miConexion.EOF
intContador = intContador + 1
Response.Write "<TABLE align=center border=0 width=500>"
Response.Write "<TR><TD class=tart_tit><B><font color=red>" & intContador & "</font> " & miConexion("Titulo") &"</B></TD></TR><BR><TR><TD><A class=tlec_conten HREF='" & miConexion("URL") & "'>" & miConexion("Desc_corta") & "</A></tr></td><tr><td class=l_inferiorg><font face=Tahoma size=1 color=red>Autor/es: <font color=#222222>" & miConexion("Autores") &"</font></font><br><br></TD></TR></TABLE><br>"
miConexion.MoveNext
Loop
Response.Write "<BR><div class=tart_tit><p align=center>Total resultados encontrados: <font color=red>" & intContador & "</font></p></div><br><br>"
End If
End If
End If
Set miConexion = Nothing
Set Conexion = Nothing
%>
Bueno... Muchas gracias por adelantado... A ver si consigues solucionarme este problema...
1

1 Respuesta

97.700 pts.
Te doy algunos consejos y te corrijo algunos errores.
De entrada no es necesario hacer 2 consultas para saber si hay registros. Con la segunda tienes más que suficiente. Si después de ejecutarla, miConexion. EOF es verdadero, es que no hay registros.
Si lo que quieres es moverte a través del recordset, es decir, mostrar una sola ficha y unos botones de "siguiente", "anterior" y todo eso, no generes un bucle para recorrer el recordset. Tienes varias opciones. Una muy rudimentaria es ir pasando a la página un parámetro con el número de registro a mostrar. Al principio, lees el parámetro donde te viene el número de página y lo asignas a "registro", por ejemplo. Si está vacío (la primera vez), lo igualas a 1 y después de ejecutar la consulta, ejecutas un "miConexion.move registro". Muestras la ficha, un botón "<" (desactivado si registro=1) que vaya a la misma página pasándole todos los parámetros con los que has llegado a ésta pero con registro=registro-1, y un botón ">" (desactivado si registro=miConexion. Recordcount) que lo que haga sea llamar a la misma página, con los mismos parámetros con los que ha entrado, pero con el parámetro de número de registro aumentado una unidad.
Otra solución es cargar todo el recordset (el que llamas "miConexion") en una variable de sesión (esto penaliza los recursos del servidor), una sola vez, y luego saltar a otra página, la que muestra los resultados, que recibirá un parámetro que le indicará si el movimiento es hacia adelante o hacia atrás. La primera vez estará vacío, con lo que leerás el recordset actual (está en una variable de sesión). Si el parámetro te dice que hay que avanzar, utilizas el método "movenext" en el recordset de la variable de sesión. Si es de retroceder, haces "moveprevious". Controla el movimiento para que sólo retroceda hasta que la propiedad BOF del recordset sea verdadera, y para que sólo avance hasta que EOF sea verdadera. Muestras el registro y los 2 botones, que llamarán a esta misma página pasando el parámetro de movimiento correspondiente.
El tercer método, más elegante, complejo de concepto pero sencillo en código, es utilizar databinding. Sólo funciona con Internet Explorer (el 98% de navegadores del mundo). No tengo documentación al respecto, pero funciona de tal manera que "ligas" la tabla a una consulta de datos en el servidor (DATASRC). Previamente debes utilizar el objeto DataSpace (creo que se llama así, funciona como un recordset) para decirle dónde están los datos (el nombre del servidor y la conexión). Luego, cada elemento de la tabla lo puedes "ligar" con un campo de la consulta (DATAFLD), y mediante Javascript hacer que los botones de movimiento ejecuten los métodos "moveprevious" y "movenext" del DataSpace, y ya está. Encontrarás información de Databinding en Internet, sobre todo en Microsoft.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas