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

Error '80020009'

Estas en el tema de Error '80020009' en el foro de ASP Clásico en Foros del Web. Vereis, tengo un problema un tanto extraño. Cuando pruebo un código en mi IIS local, no tengo ningún problema. Sin embargo, cuando lo hago en ...
  #1 (permalink)  
Antiguo 21/04/2005, 14:32
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Error '80020009'

Vereis, tengo un problema un tanto extraño. Cuando pruebo un código en mi IIS local, no tengo ningún problema.

Sin embargo, cuando lo hago en el servidor, me salta:
error '80020009'
/inc_admin_func.asp, line 442

El codigo en cuestión, con la linea de error son estos:
dim vA(2)
vA(0) = 2005
vA(1) = 2004
vA(2) = 2003
for i=0 to 2
anyo = vA(i)
response.write "<tr><td colspan=2><font class=e>"&anyo&"</font></td></tr>"
strSQL = "SELECT VISTO, MES FROM WALLPAPERS WHERE ANYO="&anyo&" ORDER BY MES ASC"
set mr = mymensconn.execute(strSQL)
do while not mr.eof or mr.bof
response.write "<tr><td width=5>&nbsp;</td>"
response.write "<td><font class=n><b>"&wallM(mr("MES"))&"</b>: "&mr("VISTO")&" descargas.</font>"
response.write "</td></tr>"
mr.movenext
loop
mr.close
set mr = nothing
response.write "</tr>"
next

¿Alguna idea de qué está pasando? Gracias
__________________
Tu portal de manga y anime.
  #2 (permalink)  
Antiguo 21/04/2005, 15:17
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola

No estoy seguro pero...

do while not mr.eof

response.write "<tr><td width=5>&nbsp;</td>"

response.write "<td><font class=n><b>" & wallM(mr("MES")) & "</b>: " & mr("VISTO") & " descargas.</font>"

response.write "</td></tr>"

mr.movenext

loop

Intentalo asi.

Por cierto, si no resulta, escribe todo el texto de error completo que te aparece.
  #3 (permalink)  
Antiguo 21/04/2005, 16:22
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Voy a probar eso que me dices. En cualquier acso, eso es todo el error que me aparece.

No sale más que ese código de error y la linea en la que se produce, no da más detalles.

EDIT: Vale, lo puse como tú comentaste y parece que ya funciona. ¿Por qué me da error al poner mr.eof or mr.bof? Es decir, la sintaxis que yo tenía puesta era correcta, ¿no?
__________________
Tu portal de manga y anime.

Última edición por meru-kun; 21/04/2005 a las 16:27
  #4 (permalink)  
Antiguo 21/04/2005, 18:28
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Lo que pasaba era esto:

Tu decias:

do while not mr.eof or mr.bof

loop

Esto significa, hazlo mientras (no estes en el final del recordset) ó (no estes en el principio del recordset)

Si te fijas en la logica de esa sentencia te daras cuenta.

Que pasaba cuando llegabas al ultimo registro ?

1. Estabas en el EOF, pero no estabas en el BOF, entonces entraba y queria sacar mas datos del recordset, ahi estaba el error

Suerte.
  #5 (permalink)  
Antiguo 22/04/2005, 07:27
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Pues sigo sin entenderlo. Es decir, esa instrucción la uso en el 90% de mis sentencias SQL y no me suele dar fallos.

De hecho, según lo entiendo yo, es:
Hazlo mientras no estés en el principio o no estés en el final

Cuando llego al EOF, entonces no se cumple la condicón (sí estoy en el final), así que de bería salir del bucle (en la sentencia tengo un O, no un Y )

En fin, no se. A veces me desconcierta un poco esto de las sentencias SQL XD.
__________________
Tu portal de manga y anime.
  #6 (permalink)  
Antiguo 22/04/2005, 07:34
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Un cursor de datos tiene DOS "registros" especiales. Aunque algunos objetos de datos hacen implicitamente un moviemiento de cursor.

Un tabla realemente es así:

BOF
primer registro
segundo registro
.....
EOF

Una tabla vacía tendria el BOF y el EOF como registros separados.

En JSP, por ejemplo, en cuanto abres el cursor estas en el BOF y si quieres irte al primer registro debes hacer un .first o un corrimiento. Si deseas regresarte al BOF haces un .beforeFirst.
Si tenemos en cuenta esto, el BOF y el EOF son diferentes y el problema lo causó el OR. Seguramente en tus otros códigos tienes un AND.

Saludos
  #7 (permalink)  
Antiguo 22/04/2005, 11:12
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
...Hazlo mientras no estés en el principio o no estés en el final

Cuando llego al EOF, entonces no se cumple la condicón (sí estoy en el final)...
Pero, creo, eso sería un "O exclusivo" (Xor) no un "O" normal.

Y comparto lo de Myakire, en los otros códigos, los que si funcionaban, tenías un AND en vez de un OR.
__________________
...___...
  #8 (permalink)  
Antiguo 22/04/2005, 11:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
:-p Nunca entendí el XOR

Salú!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 22/04/2005, 11:34
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
"O normal": Puede ser éste o aquel y hasta los dos al mismo tiempo

0 o 0 = 0
0 o 1 = 1
1 o 0 = 1
1 o 1 = 1


XOr: Sólo puede ser éste Ó aquel, nunca los dos al mismo tiempo:

0 XOr 0 = 0
0 XOr 1 = 1
1 XOr 0 = 1
1 XOr 1 = 0


:shalú:
__________________
...___...
  #10 (permalink)  
Antiguo 23/04/2005, 07:34
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Pues no se, pero insisto, tengo la mayoría de los códigos con or normal, pego un ejemplo:
strSQL2 = "SELECT VISTO FROM GAMES_SECC WHERE ID_JUEGO="&ids
set mr2 = myconn.execute(strSQL2)
do while not mr2.eof or mr2.bof
vT(i) = vT(i) + mr2("VISTO")
mr2.movenext
loop
mr.close

Y este sí funciona a la perefección.
__________________
Tu portal de manga y anime.
  #11 (permalink)  
Antiguo 23/04/2005, 10:39
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Mirando bien

Mirando bien, tu codigo podrias tener razon en que esta correcto, es ineficiente y te enreda, y pues bueno ya comprobaste que por lo mismo que es ineficiente puede fallar para ciertos casos.

La primera vez que lo vi entendi esto en mi cabeza :

do while (not mr2.eof) or (not mr2.bof)

ó

do while not (mr2.eof or mr2.bof)

Lo cual creo que yo estaba equivocado, por que lo tienes como:

do while (not mr2.eof) or (mr2.bof)

Lo cual estaria correcto, sin embargo si la consulta no te regreso ningun resultado ahi pudo haber sido el error.

Bueno, lo positivo de esto, este correcto o incorrecto tu codigo, es que siempre debes hacer las cosas con el metodo mas correcto, ya comprobaste que esto en X caso, no se cual, te dio errores, entonces lo mejor seria seguir usando el tradicional, que ademas es mas claro y seguro, simplemente:

do while not mr2.eof

Y listo, es mas claro y es realmente lo que necesitas

Suete!!
  #12 (permalink)  
Antiguo 24/04/2005, 04:25
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Aaaaaah. Ahora lo entendí todo, me quedó mucho más claro. Muchas gracias neuron (y a los demás también :P), con esos ejemplos lo he visto perfectamente.

Lo haré así a partir de ahora.

Un saludo!
__________________
Tu portal de manga y anime.
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 01:54.