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

Error al realizar un bucle

Estas en el tema de Error al realizar un bucle en el foro de ASP Clásico en Foros del Web. Buenos días, les comento mi problema: Quiero hacer un sencillo while y me está tirando un error que no se ya que más probar para ...
  #1 (permalink)  
Antiguo 04/08/2009, 08:59
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Error al realizar un bucle

Buenos días, les comento mi problema:

Quiero hacer un sencillo while y me está tirando un error que no se ya que más probar para subsanarlo, primeor el código:

<%
set cn = Server.CreateObject("ADODB.Connection")

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("db\db_expedientes.mdb") & ";"
SQLStat = "SELECT * from tbl_unidadesd"

set rs = cn.Execute(SQLStat)

%>

<%

do while not rs.EOF%>
<option><%=rs("uid")%>&nbsp;<%=rs("unidad")%></option>
<%rs.MoveNext
loop
%>

Como verán quiero llenar un <select> simplemente, y me da el error ADODB.Field (0x80020009)
El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual.


Y ya probé de todo y logro hacer andar esto.
Por supuesto, que la consulta trae datos, ese no es el problema, traté de antes de hacer el while posicionarme en el primer regitro, pero no pasa nada, cambié la forma de abrir la cadena de conexión y el recordset y tampoco, ya no se que más hacer.

Si alguien puede ayudar se lo agradeceré.

Saludos.
  #2 (permalink)  
Antiguo 04/08/2009, 09:31
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

es probable que uid venga vacia o "unidad" venga vacia
  #3 (permalink)  
Antiguo 04/08/2009, 09:35
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

No, no, ambos tiene datos.

De hecho haciendo un respose.write(rs("uid")) y respose.write(rs("uid")), me trae los datos del primer registro como corresponde.
  #4 (permalink)  
Antiguo 04/08/2009, 09:37
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

aja, pero del primero.
quizas el segundo o del tercero o alguno de toda la lista viene vacio, y es por eso que se cae.

checa los datos en la bd y ve que toooooodos vengan con datos.
si solo uno no viene con datos, entonces se caera toda la aplicacion.


es un error bastante normal, lo que deberias hacer es verificar que el dato existe antes de imprimirlo en la pantalla.
  #5 (permalink)  
Antiguo 04/08/2009, 09:41
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

96 registros y todos con datos, el problema no está en lo que trae la consulta.
  #6 (permalink)  
Antiguo 04/08/2009, 09:45
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

aja... bueno entonces es por que cuando llegas al final de la lista, osea EOF se cumple.
lo obligas a dar un paso mas con el movenext y por eso se cae.

quizas deberias usar un if antes de obligarlo a hacer el movenext
  #7 (permalink)  
Antiguo 04/08/2009, 09:50
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

Eh?? ¿Y eso desde cuando es?
Hagamos la prueba de escritorio:

La condición es que no sea fin de archivo, ahi imprimir los datos y moverse al siguiente, asi hasta que justamente SEA eof lo que provoca el fin del bucle ¿para que necesito hacer un if allí si ya está evaluando si es o no eof?
De todos modos, con el if tampoco funciona, tira el error al entrar en el bucle.
  #8 (permalink)  
Antiguo 04/08/2009, 09:55
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

ponle un error resume next y ve hasta donde te imprime
  #9 (permalink)  
Antiguo 04/08/2009, 10:12
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

Poniendo el resume (¿Como cuernos no se me ocurrió?), me muestra que imprime todos los registros, es decir el error, se da luego.
Lo que no logro entender, es, si llegó a EOF, por qué sigue en el loop e intenta, mover el cursor nuevamente (si esto es lo que provoca el error)
Y por otro lado, poniendo un if para verificar que no sea eof antes de hacer el movenext, sigue dando el mismo error.
  #10 (permalink)  
Antiguo 04/08/2009, 10:15
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

pues coloca el IF antes de imprimir
  #11 (permalink)  
Antiguo 04/08/2009, 10:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

Lo ponga, antes de imprimir o antes del movenext sigue dando ese error.
¿Alguna idea? Porque ya la opción d que fuera porque alcanzó el fin de archivo no me suena, si asi fuera, primero tendría que haber salido del bucle, y aún si esto no sucediera, tendría que parar la ejecución en el if.
  #12 (permalink)  
Antiguo 04/08/2009, 10:56
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

checa como hacen el bucle aqui en un ejemplo que encontre...
se ve aprueba de balas


Código asp:
Ver original
  1. Set Connect = Server.CreateObject("ADODB.Connection")
  2. Connect.Open MM_connDUpoll_STRING
  3. Query = "Select * from tbl_check WHERE IPCHECK='"&Request("IPCHECK")&"'"
  4. Set rs=Connect.Execute(Query)
  5.  
  6. If rs.EOF then
  7. Response.Redirect("YOU CAN VOTE PAGE")
  8.  
  9. Else
  10.  
  11. Do While Not rs.EOF
  12.  
  13. If FormatDateTime(Request("IPDATE"))=FormatDateTime(rs("IPDATE")) then
  14.  
  15. Response.Redirect("SORRY YOU CANT VOTE PAGE")
  16. Else
  17. Response.Redirect("YOU CAN VOTE PAGE")
  18. End If
  19.  
  20. rs.MoveNext
  21. Loop
  22. End If
  23.  
  24. rs.Close
  25. Connect.Close
  #13 (permalink)  
Antiguo 04/08/2009, 11:02
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

Pués la verdad no le veo diferencia, salvo que hacen un if para en caso de que la consulta no traiga datos (if rs.eof then xxxx), pero este no es el caso.

Fijate, otro código, en la misma aplicación que hace lo mismo y funciona perfectamente:

Código c&#243:
Ver original
  1. set cn = Server.CreateObject("ADODB.Connection")
  2.  
  3. cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.Mappath("db\db_expedientes.mdb") & ";"
  4.  
  5. SQLStat = "SELECT * from tbl_tipos"
  6.  
  7. set rs = cn.Execute(SQLStat)%>
  8.  
  9. <select name="tipos">
  10. <%
  11. Do while not rs.eof
  12. %><option><%=rs("tid")%>&nbsp;<%=rs("tipo")%></option><%
  13. rs.movenext
  14. loop
  15. %>
  16. </select>

Última edición por quatrero; 04/08/2009 a las 11:13
  #14 (permalink)  
Antiguo 04/08/2009, 11:20
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Error al realizar un bucle

por que tiene datos.... en fin.
sino quieres probar ya es cosa tuya.
  #15 (permalink)  
Antiguo 04/08/2009, 11:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 11
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Error al realizar un bucle

No es que no quiero probar, ya probé y es lo mismo, me sigue dando el mismo error.
Y no entiendo por qué

En el ejemplo que vos me pasaste la única diferencia era el if, lo agregué y sigue = (cosa lógica, ya que ese if solo comprueba que haya datos en la consulta Y LOS HAY)

El último código que te pase, es exactamente igual al primero, es parte de la misma aplicación y usa la misma db

¿Diferencias? No las se, en un caso funciona y en el otro no y es lo que me está complicando la vida. En ambos la consulta trae datos.
  #16 (permalink)  
Antiguo 04/08/2009, 15:16
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
Respuesta: Error al realizar un bucle

¿Cómo esta el código en cuestión en la actualidad?

Por lo que he leído, supongo que como esto:

Código asp:
Ver original
  1. while not rs.EOF
  2.    if not rs.EOF then%>
  3. <option><%=rs("uid")%>&nbsp;<%=rs("unidad")%></option>
  4. <%
  5.   end if
  6. rs.MoveNext
  7. wend
  8. %>

Y si, aparentemente ese IF esta redundando una condición que supuestamente debiera controlar el WHILE. Me ha tocado (hace años no manejo Access, pero recuerdo) que cuando trabajaba con tablas resultado de importar algún Excel "se comportaba extraño", por lo que aparte de verificar el EOF verificaba que el campo en cuestión tuviera contenido, ese IF modifícalo para que valide el que el LEN(TRIM(campo)) sea mayor a cero.

Ya nos contaras.

Saludos
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 09:32.