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

paginando

Estas en el tema de paginando en el foro de ASP Clásico en Foros del Web. Hola a todos, Tengo un código que me sirve para paginar la consulta que yo quiero, pero cuando cojo valores de un formulario ya no ...
  #1 (permalink)  
Antiguo 21/05/2004, 06:55
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
paginando

Hola a todos,

Tengo un código que me sirve para paginar la consulta que yo quiero, pero cuando cojo valores de un formulario ya no funciona bien.

¿A alguien le ha pasado esto? ¿Alguien sabe cómo solucionarlo?

Cuando intento hacerlo cogiendo valores de un formulario, no puedo pasar de la primera hoja, me dice que ya no hay más valores.

Este es el código que tengo para paginar:

<%

sql="select idAutorFK, numeroPK from tb_tabla"
%>


<%xx=request.form("direccion")
if xx = "Atras" then
session("pagina")=session("pagina")-1

if session("pagina")< 1 then
session("pagina")=1
end if

else
if xx="Adelante" then
session("pagina")=session("pagina")+1
else
session("pagina")=1
end if
end if


Set Ob_Conn=Server.CreateObject("ADODB.Connection")
ob_conn.Open "Provider=sqloledb;" & _
"Data Source=sena;" & _
"Initial Catalog=producto;" & _
"User Id=pat;" & _
"Password=pat"

Set Ob_RS=Server.CreateObject("ADODB.Recordset")
ob_RS.CursorLocation =adUseClient

Ob_RS.Open sql,ob_conn,3,1

Ob_RS.PageSize=10

if ob_rs.pagecount=0 then
Response.Redirect "novalores.asp"
end if

if session("pagina")>ob_rs.pagecount then
session("pagina")=ob_rs.pagecount
end if

ob_rs.absolutepage=session("pagina")
inicio=1+(session("pagina")-1)*ob_rs.pagesize
fin=inicio+9
if fin > ob_rs.recordcount then
fin =ob_rs.recordcount
end if
%>

<center><h3>LISTA DE PATENTES SOLICITADAS</h3></center>
<table border="0" width="100%" bgcolor="khaki">
<tr>
<td width="50%" align="center">Registros <font color="#FF0000"><%=inicio%> </font>
al <font color="#FF0000"><%=fin%></font> de un total de
<font color="#FF0000"><%=ob_rs.recordcount%></font></td>
<td width="50%" align="center">Página <font color="#FF0000"><%=session("pagina")%>
</font> de <font color="#FF0000"><%=ob_rs.pagecount%></font></td>
</tr>
</table>
<br>

<%IF NOT Ob_RS.Eof THEN%>
<TABLE BORDER=1>
<center>
<table border="2" bgcolor="white">
<TR>
<TH>Autor</TH>
<TH>Numero</TH>

<%Registro=0
DO WHILE Registro<10 AND NOT Ob_RS.Eof%>
<TR>
<TD><%=Ob_RS("idAutorFK")%></TD>
<TD><%=Ob_RS("numeroPK")%></TD>

<%Registro=Registro+1
Ob_RS.MoveNext
LOOP
Response.Write "</TABLE>" %>


<table border="0" width="38%" height="5">
<tr><%if session("pagina")<> 1 then %>
<td width="50%" height="1" align="center">
<form method="POST" action="Prueb2.asp">
<p><input type="submit" value="Atras" name="direccion"></p>
</form>
</td><%end if%>
<%if session("pagina")< ob_rs.pagecount then%>
<td width="50%" height="1" align="center">
<form method="POST" name="Prueb2.asp">
<p><input type="submit" value="Adelante" name="direccion"></p>
</form>
</td><%end if%>
</tr>
</table>
</center>
</div>

<%END IF%>

<% Ob_RS.Close
Ob_Conn.Close%>
  #2 (permalink)  
Antiguo 21/05/2004, 07:45
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Ya aguien mas ha tenido problemas al modificar este código. Prueba el que esta en las FAQ's. No tiene problemas.

pero, por otra parte, si necesitas usar este, explicame, por favor, ¿cómo que coges valores del formulario?, si los tomas de una consulta.
  #3 (permalink)  
Antiguo 21/05/2004, 07:50
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Es que aquí he puesto la paginación q sale bien pero cuando hago esto.... sale mal. Me enseña solo la primera página. Si hay pocos valores(menos de diez en mi caso bien) pero sino cuando le das al botón siguiente aparece que no hay más valores.

En vez del sql del principio le meto esto:

Poner_AND=False

sql="select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where "
if (idAutor<>CStr(1)) then
if (Poner_AND) then
sql=sql & "and idAutorFK='" & idAutor & "'"
else
sql=sql & "idAutorFK='" & idAutor & "'"
Poner_AND=true
end if
end if
if (numeroPatente<>"") then
if (Poner_AND) then
sql=sql & " and numeroPatentePK LIKE '%" & numeroPatente & "%'"
else
sql=sql & " numeroPatentePK LIKE '%" & numeroPatente & "%'"
Poner_AND=true
end if
end if

Si se te ocurre algo.... estoy desesperada.
Gracias por intentarlo por lo menos.
  #4 (permalink)  
Antiguo 21/05/2004, 08:04
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Disculpa, pero aunque se entiende tu código, esta algo..... enrollado.
¿Podrias imprimir el resultado de todas tus concatenaciones?, es decir, usa un "response.write sql" y posteamelo, creo que el problema no es el código, sino la consulta.

Vamos, que esto lo sacamos en un rato.

Saludos
  #5 (permalink)  
Antiguo 21/05/2004, 08:12
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Por ejemplo si hago una búsqueda no metiendo el autor (que es un combox q me devuelve el id del autor que le indique, el valor uno seria el de cualquier autor) y si meto un número de patente EP1378319 saldría esto:

select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where numeroPatentePK LIKE '%EP1378319%'

si en cambio meto el autor y no meto el numpatente me daría esto:

select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where idAutorFK='9'

y si meto los dos campos:

select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where idAutorFK='9' and numeroPatentePK LIKE '%EP%'

Creo q esto es lo q me pedías no?

Estoy mirar y mirar y no tiene lógica esto

Gracias por la ayuda, anima mucho.
  #6 (permalink)  
Antiguo 21/05/2004, 08:22
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Útima pregunta:
Esta consulta, te sirve perfectamente
sql="select idAutorFK, numeroPK from tb_tabla", es decir, páginas todos tus registros sin problemas.

Pero cualquiera de las tres anteriores, solo los primeros 10.

¿Es verdad?

(Mientras me contestas, voy a probar tu código).
  #7 (permalink)  
Antiguo 21/05/2004, 08:27
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Si, has entendido perfectamente. El código de paginar por esto, supongo q está bien, el problema esta en la sentencia sql. No sé si cuando está en la sentencia una variable se marea o q le pasa.

Es q no se me ocurre otra manera de hacerlo.

Gracias
  #8 (permalink)  
Antiguo 21/05/2004, 08:58
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Mira Goizane. A mi me funciona perfectamente.
Lo único diferente es que yo lo probé con Procedimientos almacenados.

En lugar de:

sql="select idAutorFK, numeroPK from tb_tabla"
..
Ob_RS.Open sql,ob_conn,3,1

yo puse:

sql="Execute sListaArticulos"
Ob_RS.Open sql,cnn,3,1
  #9 (permalink)  
Antiguo 21/05/2004, 09:01
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Hice uno sin tal cual: select * from articulos
y otro con select * from articulos where idarticulo > 100 and descripcion like '%papel%'

Y si me regresa diferentes registros y me los pagina bien.

¿No será que tu consulta, efectivamente te regresa menos de 10 registros?
  #10 (permalink)  
Antiguo 21/05/2004, 09:03
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
aaahhhh, otra cosa, le comente la linea:
'ob_RS.CursorLocation =adUseClient

pero por que no tenía a la mano el archivo de constantes "adovbs.inc", no pienso que eso fuera.
  #11 (permalink)  
Antiguo 21/05/2004, 09:04
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Y q es eso de los procedimientos almacenados?

Q es sListaArticulos? el nombre de la tabla o q?

Si a mi también si meto la sentancia solo me sale bien pero si la voy concatenando como lo hago yo falla. Y si no, no se me ocurre una manera de hacer la sentencia xq tengo nueve campos y quiero q la busqueda se pueda hacer con los campos q el usuario lo desee, asiq pueden estar en blanco o no y para hacer eso....
  #12 (permalink)  
Antiguo 21/05/2004, 09:06
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Por cierto, si le cambias las tres lineas que mencionamos en el otro post (¡¡ya te reconoci!!), efectivamente aumenta o disminuye el número de registros a paginar:

...
Ob_RS.PageSize=5
...
fin=inicio+5
...
DO WHILE Registro<5 AND NOT Ob_RS.Eof
  #13 (permalink)  
Antiguo 21/05/2004, 09:07
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
no, tengo más de 10 valores. Yo también he echo la prueba con una sentencia sql tipo select * from articulos where idarticulo > 100 and descripcion like '%papel%' y me funciona bien, pero lo q te digo, para la búsqueda q yo quiero no sé como hacer eso sin tener que meter mogollón de sentencias if y sql
  #14 (permalink)  
Antiguo 21/05/2004, 09:09
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Si jejeje me respondiste ayer, pero la q estaba equivocada era yo, pq con otra consulta me salia bien lo de paginar pero gracias a esta sql no sale bien. Lo de paginar anda OK
  #15 (permalink)  
Antiguo 21/05/2004, 09:10
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Tu BD's debe tolerar Procedimientos Almacenados, por seguridad es mejor usar esto en lugar de permisos de select a las tablas. Pero no es eso por lo que supongo falla.

Mira prueba usar la consulta como código duro, es decir, cambia la asignación de:

sql="select idAutorFK, numeroPK from tb_tabla"

y prueba usar:

sql="select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where idAutorFK='9' and numeroPatentePK LIKE '%EP%'"

Y checa si te regresa todos los registros que se supone debería (¿verificaste que fueran mas de 10?)

Dime que sale.
  #16 (permalink)  
Antiguo 21/05/2004, 09:13
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
ya he echo lo que me dices:

sql="select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where idAutorFK='9' and numeroPatentePK LIKE '%EP%'"


y me sale bien. Lo que no tolera es q vaya montando la sentencia
  #17 (permalink)  
Antiguo 21/05/2004, 09:15
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Comenta la linea:
'ob_RS.CursorLocation =adUseClient

para que el cursor siga en el servidor. Tal vez en el traslado se pierda.
  #18 (permalink)  
Antiguo 21/05/2004, 09:18
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
lo he probado y no me funciona lo de comentar la linea:

'ob_RS.CursorLocation =adUseClient
  #19 (permalink)  
Antiguo 21/05/2004, 09:18
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
a ver, a ver, a ver......
¿Si lo pones como código duro funciona bien?

mmmmmmm, entonces simplemente se esta armando mal.

Un espacio entre los apostrofes que no lo hayas visto. Algo por el estilo.

¿Ya probaste imprimir el contenido de "sql", copiarlo y tal cual, sin modificarlo e nada, correrlo en el "exlorador de consultas" o la herramienta que tengas para correr consultas?
  #20 (permalink)  
Antiguo 21/05/2004, 09:24
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
perfecto, lo he echo y se ejecuta bien y el paginar funciona.

Yo creo q lo unico q pasa es q no tolera q se monte el sql.

¿alguna manera de hacerlo? y si paso la sentencia a otra pagina y lo hago por separado?¿ como lo tendría q hacer para leer la sentencia sql?
  #21 (permalink)  
Antiguo 21/05/2004, 09:29
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
No tiene absolutamente nada que ver que concatenes la sentencia SQL. Al fin y al cabo se manda al servidor un string de parámetro, sin importar si es código duro o se formo en tiempo de ejecución.
Me imagino estas usando Access ¿verdad?, yo una vez tuve un problema con access, el LIKE %cadena%, no regresaba lo correcto, pero era por que acces no utiliza el SQL ANSI o estándar.
Prueba usar LIKE 'Cadena*', es decir * en lugar de %.
  #22 (permalink)  
Antiguo 21/05/2004, 09:32
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
no, estoy usando sql y lo de % funciona bien parece. Haciendo una consula tipo:

sql="select idAutorFK, numeroPatentePK, idFabricanteFK, fechaPublicacion, fechaPrioridad, resumen, idtecnologiaFK, idPalabraClaveFK, urlEnlace, urlPdf from tb_patente where idAutorFK='9' and numeroPatentePK LIKE '%EP%'"


sale bien. Ya no se me ocurre nada más
  #23 (permalink)  
Antiguo 21/05/2004, 09:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Ahora, si en definitiva no pudes hecharlo a andar. Puedes colocar las convinaciones de tus consultas en variables constantes. Y, dependiendo de los parámetros que recibas, usa una de las variables como parámetro del Ob_RS.Open <param1,2 o 3>,cnn,3,1.

Lo bueno es que tienes un número finito y pequeño de convinaciones. Pero insisto que creo el problema debe ser más fácil de resolver.
  #24 (permalink)  
Antiguo 21/05/2004, 09:36
 
Fecha de Ingreso: abril-2004
Mensajes: 21
Antigüedad: 21 años
Puntos: 0
Bueno, pues lo voy a dejar por hoy y ya lo intentaré el lunes que será otro dia.

Gracias por todo.
  #25 (permalink)  
Antiguo 21/05/2004, 09:38
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Mira, esto es lo último que te pediría si realmente no quisiera ayudarte. ¿Podrías mandarme el archivo .mdb de tu base de datos y tu archivo.asp? Esto ya es personal.
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 16:36.