Paginar base de datos

Estoy accediendo a una base de datos que tiene dos tablas (Access). Hago la consulta de la base de datos usando el INNER JOIN para poder acceder a los campos de las dos tablas. Hasta aquí, todo bien.
El problema está en cuando intento paginar los resultados usando:
Ob_RS.PageSize=10
Ob_RS.AbsolutePage=Session("Pagina")
El error que me da la página es el siguiente:
ADODB. Recordset error '800a0cb3'
Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype.
¿Cómo puedo conseguir paginar el recordset?
Gracias.

1 Respuesta

Respuesta
1
A que te refieres con paginar el recordset -no lo había oído nunca, pero si me lo explicas fijo que se que es-
Ten en cuenta que acceder desde ASP a las bases de datos mediante ODBC tiene sus limitaciones y hay algunas cosas que no están permitidas, y juraría que la paginación es una de ellas.
Si lo que quieres es que devuelva resultados en grupos de 10, entonces no tendrás más remedio que hacerlo a pelo. O sea, saltándote los elementos que no vayas a mostrar... porque creo recordar que Access solo permite el uso de TOP en las sentencias SQL -para obtener los N primeros recordsets-
Es una limitación con la que hay que vivir.
<%if (Request.QueryString("Pagina") == "Pagina Siguiente")
Session("Pagina")=Session("Pagina")+1
else
if (Request.QueryString("Pagina") == "Pagina Anterior")
Session("Pagina")=Session("Pagina")-1
else
Session("Pagina")=1
Este código me permite controlar el número de página en la que estoy. Luego,
Ob_RS.PageSize=10
Ob_RS.AbsolutePage=Session("Pagina")
Indica al recordset qué datos debe recoger, dependiendo del tamaño de la página y de la variable Session("Pagina"). Esto lo llevo utilizando desde hace tiempo y funciona, a no ser que intentes utilizar dos tablas en un mismo comando SQL. Es entonces cuando me ha dado el error.
Si realmente se trata de una limitación (me temo mucho que si), ¿a qué te refieres con hacerlo a mano?
Vale...
Lo que tienes que hacer es codificar las URLs que te llevan a la siguiente página de este modo:
supongamos que estamos en la pagina 2
siguientes 10: mipagina.asp?grupo=3
anteriores 10: mipagina.es?grupo=1
Entonces:
Cuando la página se ejecuta:
tenemos que mostrar desde el recordset N*10 al (N+1)*10 - 1
Al estar en la página 2 mostramos del recorset 20 al 29.
Es la única forma de hacerlo.
Por cierto, ten en cuenta que antes de mostrar el link a siguientesN, tienes que comprobar si has llegado al final del recordset en esta página. Lo digo porque es un fallo común. :-)
Estoy casi seguro de que es una limitación del ODBC-ASP puesto que yo también lo he intentado hacer antes y esta era la única solución.
Y por último, necesito saber cómo sacar solamente una parte de un campo de texto. La cuestión es que tengo que hacer una relación de descripciones en una búsqueda, pero solo quiero coger un poco de texto, no todo. ¿Entiendes? Es algo parecido a lo que hacen los buscadores, te muestran un poco de texto de lo que es la descripción del web. He probado con el substring, pero no me lo coge.
Pues creo que lo mejor seria
<%
'ojo, pseudocodigo ;-)
micadena = rs.field ("nombrecampo").value
trozo = mid (micadena, desdeaqui, numerocaracteres)
%>
Para saber como funciona mid busca ayuda en la ayuda de IIS.
Lo que puedes calcular es la posición en la que sale la palabra a buscar, sumar y restar unos 100 caracteres por delante y detrás y cortar y mostrar eso.
No utilizo VBScript, sino JScript. Y el mid en JScript se lo pasa por el forro. Juraría que la instrucción en JScript que equivale al mid, es substring, pero tampoco me funciona. ¿No sabrás tú un sitio donde salgan traducidas las instrucciones de un lenguaje y otro, a modo de comparación?
Gracias.
puff... así sitio exacto no
Pero te aseguro que desde www.aspin.com puedes llegar a lo que buscas.
Personalmente te aconsejaría usar VbScript en ASP -he encontrado algún bug que otro en la implementación que tienen de JScript en algunas versiones-. Al fin y al cabo el VB es de microsoft :-) (si, ya se que el JScript también, pero es un refrito).
Ya te digo, a través de www.aspin.com puedes encontrar eso... ah! Y si, la equivalente es substring, que si funciona igual que en java tendría que ser algo así como
cadena. Substring (desde, hasta)
Una curiosidad:
Si utilizo esto:
c="Texto cualquiera"
d=c.substring(1,5)
Response.Write(d)
Funciona perfectamente. En cambio, usando esto:
c=Ob_RS("campo")
h=c.substring(1,10)
Response.Write(h)
Obtengo el error "Object doesn't support this property or method".
¿Por qué?
He intentado asignar un string inicial a c, pero no sirve de nada.
c=Ob_RS.Field ("campo").Value
h=c.substring(1,10)
Response.Write(h)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas