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

while problem

Estas en el tema de while problem en el foro de ASP Clásico en Foros del Web. Hay algún problema si se hace dos bucles al recordset?, porque tengo hecha una aplicacion que funciona bien, pero como tira muchos records, quise limitar ...
  #1 (permalink)  
Antiguo 11/04/2003, 08:45
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 382
Antigüedad: 21 años, 5 meses
Puntos: 0
while problem

Hay algún problema si se hace dos bucles al recordset?, porque tengo hecha una aplicacion que funciona bien, pero como tira muchos records, quise limitar la muestra de estos a 50, entonces agregé esto:

<% DIM encSQL
while not objrs.eof
encSQL = encSQL + 1
objrs.movenext
wend

if encSQL > 50 then
server.transfer "retorno.asp"
end if
%>

cuando supera los 50 redirecciona a retorno.asp, pero si tiene menos, el resultado de la busqueda es siempre cero.

me pregunto si es porque mas abajo está el ciclo al mismo recordset (objrs), para que muestre el resultado:

while not objrs.eof
<TH><%=objrs("SUBTITULO")%></TH>

...................................

porque si saco el anterior vuelve a funcionar bien.

Espero que puedan ayudarme, porque es algo que necesito solucionar.

Muchas Gracias.
__________________
Juan Pablo
  #2 (permalink)  
Antiguo 11/04/2003, 09:38
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Oye, una cosilla.

Quieres que cuando llegue a 50 el objeto while se detenga y te muestre esos que lleva no?

Prueba poner así...

<%
DIM encSQL
Do while not objrs.eof
encSQL = encSQL + 1

If encSQL > 50 then
exit do
end If

objrs.movenext
Loop
%>

Dime que tal


Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #3 (permalink)  
Antiguo 11/04/2003, 10:05
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 382
Antigüedad: 21 años, 5 meses
Puntos: 0
Gracias por contestar, probé con lo que me dijiste, pero sigo con el mismo problema.

<%DIM encSQL
encSQL = 0
Do while not objrs.eof
encSQL = encSQL + 1

If encSQL > 50 then
server.transfer "retorno.asp"
end If
objrs.movenext
Loop

debí adaptarlo a lo que quiero, pero no tengo forma de hacer el exit loop

lo que quiero es que si hay mas de 50 records, transfiera a otra pagina, sino, que siga el codigo con su curso normal.

alguna ocurrencia?

saludos
__________________
Juan Pablo
  #4 (permalink)  
Antiguo 11/04/2003, 10:40
Avatar de cacike500  
Fecha de Ingreso: noviembre-2002
Mensajes: 56
Antigüedad: 21 años, 7 meses
Puntos: 0
si se me permite...una sugerencia

Si el problema es que tu consulta recupera muchos registros, te recomendaría que usases paginación. Me explico. La paginación es un método para dividir una consuta en páginas con un determinado número de registros, así cuando lanzas la consulta sólo recupera la primera página, con lo cual no sobrecargas con trabajo extra al servidor y por tanto consigues una aplicación más rápida.

La obtención de un recordset paginado se haría de la siguiente manera:

dim bd
dim registros
set bd = server.createobject("ADODB.Connection")
bd.open("DSN=nombre_DSN") 'En el caso de que uses una DSN, si no tu correspondiente cadena de conexión
SQL="select ..." 'Tu consulta SQL
set registros = server.createobject("ADODB.Recordset")
registros.PageSize=25 'Número de registros que deseas obtener por página
registros.Open SQL, bd, 3, 3 'Obtenemos el recordset
'Obtenemos el número de página que vamos a mostrar
'este dato lo pasamos en la URL
if request.QueryString("pag") = "" then
registros.AbsolutePage=1
else
registros.AbsolutePage=CInt(request.QueryString("p ag"))
end if
'El recordset queda situado en el primer registro de la página seleccionada
dim cont 'Contaremos los registros mostrados para no pasarnos de número de registros de la página
cont = 1
do while not registros.eof and cont <=25
<proceso>
cont = cont +1
registros.movenext
loop

Luego tendrás que poner unos botones con página siguiente y página anterior. Simplemente tendrás que poner como vínculo a esos botones algo así:
Página siguiente:
pagina.asp?pag=<%=registros.AbsolutePage+1%>
Página anterior:
pagina.asp?pag=<%=registros.AbsolutePage-1%>

Te mucho cuidado con no pasarte del número máximo de página (registros.PageCount), y no ir a ninguna página menor que la 1.

Espero que te sirva, es muy aconsejable cuando se trabaja con un gran número de registros.
__________________
como dice un sabio amigo mio:
web puede...
master algo menos...
[AIG...2001]
  #5 (permalink)  
Antiguo 11/04/2003, 10:53
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 382
Antigüedad: 21 años, 5 meses
Puntos: 0
Gracias por la sugerencia, pero tengo que hacerlo así, porque en mi pagina no tiene sentido que tire mas de 50 records.

ya lo solucioné, pero me queda la duda de por qué no anda si lo pongo en la misma página?.

tuve que hacer una pagina previa, en donde puse lo sig:

....................
proceso para armar el SQL

....................................

luego de hacer el bucle para saber la cantidad de records:

if encSQL > 50 then
server.transfer "retornar.asp"
end if
if encSQL < 51 then
server.transfer "busqueda.asp"
end if

asi anda, alguien sabe por qué puede pasar esto?


saludos
__________________
Juan Pablo
  #6 (permalink)  
Antiguo 11/04/2003, 10:55
Avatar de Fr@Nc3$c0  
Fecha de Ingreso: abril-2002
Ubicación: Barcelona (Spain)
Mensajes: 710
Antigüedad: 22 años, 2 meses
Puntos: 1
Hol@ amigo:

Prueba con una de estas posibilidades y cuéntame:

~~~~~~~~~~~~~~~~~~~~~~
<%
DIM encSQL
Do while not objrs.eof
encSQL = encSQL + 1

If encSQL > 50 then
response.redirect("retorno.asp")
end If

objrs.movenext
Loop
%>
~~~~~~~~~~~~~~~~~~~~~~

o

~~~~~~~~~~~~~~~~~~~~~~
<%
DIM encSQL
Do while not objrs.eof
encSQL = encSQL + 1

If encSQL > 50 then
exit do
response.redirect("retorno.asp")
end If

objrs.movenext
Loop
%>
~~~~~~~~~~~~~~~~~~~~~~

Salu2!
__________________
Francesc Mula Calleja
Hay mucho por ver todavía...
  #7 (permalink)  
Antiguo 11/04/2003, 11:52
Avatar de MsTech.DotNet  
Fecha de Ingreso: marzo-2003
Ubicación: Maracay - Edo. Aragua
Mensajes: 605
Antigüedad: 21 años, 2 meses
Puntos: 0
Hola... tu quieres que te muestre siempre 50 registros??? o que te pagine los resultados de 50 en 50???

Porque podrias probar haciendo una consulta asi..

Sql="Select TOP 50 from Tabla ORDER BY CAMPO DESC"

Y muestras por ejemplo siempre los ultimos 50 registros... y si lo ordenas ASC te muestra los 50 primeros

En caso de que quieras solo mostrar 50 registros por pagina entonces utiliza la paginacion de registros....

Saludos...
__________________
Ing. Javier Ugalde
Desarrollador de Aplicaciones Web / Windows
Director de Desarrollos Web
Ing. en Información
Email: [email protected]
Telf. Hab: +[58] - (243) - 232.02.06
Telf. Cel: +[58] - (414) - 455.26.80
  #8 (permalink)  
Antiguo 11/04/2003, 13:44
 
Fecha de Ingreso: diciembre-2002
Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 382
Antigüedad: 21 años, 5 meses
Puntos: 0
TAMBIEN ESA ES BUENA, LA DE HACER UN TOP TEN, LO QUE PASA ES QUE MI SQL OCUPA CERCA DE DOS PÁGINAS, ASI QUE OPTÉ POR HACER EL CONTEO DE RECORDS EN UNA PAGINA PREVIA QUE TRANSFIERE A LA PÁGINA QUE IMPRIME LOS RESULTADOS, PERO MI DUDA ES POR QUÉ NO FUNCIONAN LOS DOS BUCLES EN LA MISMA PÁGINA?

SALUDOS Y GRACIAS A TODOS.
__________________
Juan Pablo
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 22:43.