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

Error en un IF

Estas en el tema de Error en un IF en el foro de ASP Clásico en Foros del Web. Hola,estoy intentando comparar el resultado de 2 sentencias SQL con tal de mostrarlas en una tabla y que me cambien los colores de las celdas ...
  #1 (permalink)  
Antiguo 02/12/2004, 08:10
 
Fecha de Ingreso: septiembre-2003
Mensajes: 24
Antigüedad: 20 años, 8 meses
Puntos: 0
Error en un IF

Hola,estoy intentando comparar el resultado de 2 sentencias SQL con tal de mostrarlas en una tabla y que me cambien los colores de las celdas en función del resultado de la comparación,lo que pasa es que me da error,aqui os pongo parte del codigo:

'recogo datos de un combo
var250=request.form("lala")
var251=request.form("lala1")
SQL = "SELECT * FROM tabla WHERE corredor = '" & var250 & "' AND carrera IN (SELECT carrera FROM tabla WHERE corredor = '" & var251 & "') ORDER BY Fecha"
rs250.Open SQL, cn250, 3, 3
While not rs250.EOF
Set rs251 = Server.CreateObject ("ADODB.RecordSet")
var2501=request.form("lala")
var2511=request.form("lala1")
SQL1 = "SELECT * FROM tabla WHERE corredor = '" & var2511 & "' AND carrera IN (SELECT carrera FROM tabla WHERE corredor = '" & var2501 & "') ORDER BY Fecha"
rs251.Open SQL1, cn250, 3, 3
While not rs251.EOF
Dim color,color1,tabla1,tabla,A,B
If rs250("Pos")="DNF" then
rs250("Pos")=110
'con esto quiero pasar el texto que aparece en la tabla a una constante en este caso 110 para conseguir un numero con el que comparar
ElseIf rs250("Pos")="DNS" THEN
rs250("Pos")=140
ElseIf rs250("Pos")="DQ" THEN
rs250("Pos")=120
ElseIf rs250("Pos")="NC" THEN
rs250("Pos")=100
ElseIf rs250("Pos")="DNQ" THEN
rs250("Pos")=130
ElseIf rs250("Pos")="DNA" THEN
rs250("Pos")=160
ElseIf rs250("Pos")="WD" THEN
rs250("Pos")=150

If rs251("Pos")="DNF" THEN
rs251("Pos")=110
ElseIf rs251("Pos")="DNS" THEN
rs251("Pos")=140
ElseIf rs251("Pos")="DQ" THEN
rs251("Pos")=120
ElseIf rs251("Pos")="NC" THEN
rs251("Pos")=100
ElseIf rs251("Pos")="DNQ" THEN
rs251("Pos")=130
ElseIf rs251("Pos")="DNA" THEN
rs251("Pos")=160
ElseIf rs251("Pos")="WD" THEN
rs251("Pos")=150
A=CInt(rs250("Pos"))
B=CInt(rs251("Pos"))
If (A<B) THEN
tabla="#990000"
color="#FFFFFF"
else
tabla="#CCCCCC"
color="#000000"
%>

despues en la tabla hago los tipicos <%=tabla> y <%=color>

y finalmente cierro con

<% End If
End If
End If
End If
End If
rs250.MoveNext
rs251.MoveNext
Wend
Wend
rs250.close
rs251.close
Set rs250 = Nothing
Set rs251 = Nothing
cn250.Close
Set cn250 = Nothing
%>


el error me lo da en esta linea
If rs250("Pos")="DNF" then <------es decir la primera dentro de los If

cualquier ayuda será bienvenida
un saludo
  #2 (permalink)  
Antiguo 02/12/2004, 08:20
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
Todo muy bien, pusiste el código, explicaste lo que intentas hacer........, pero no pusiste el error que te marca y que seguramente indicara el tipo de problema.
Supongo que ha de ser error de tipos, pero mejor esperamos a que lo postees.

Saludos
  #3 (permalink)  
Antiguo 02/12/2004, 09:39
 
Fecha de Ingreso: septiembre-2003
Mensajes: 24
Antigüedad: 20 años, 8 meses
Puntos: 0
pozi,me olvidé

el error

error '80020009'
/Compara.asp, line 70

no se que error será
  #4 (permalink)  
Antiguo 02/12/2004, 12:15
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 8 meses
Puntos: 2
Hola!
Primero deberías colocar qué parte del codigo corresponde a la linea 70.
Luego, si me permitís una opinión en lo referente a legilibilidad de código, en las comparaciones te convendría hacer un select case en vez de tantos elseif
__________________
Why can't we not be sober?
www.partitorium.com.ar
  #5 (permalink)  
Antiguo 02/12/2004, 14:19
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
Ese error es clásico de un intento de lectura más allá del límite del recordset, con ello ví con un poco de cuidado tu código y detecto que haces dos ciclos anidados dónde estas creando varias veces el mismo objeto, pero no lo destruyes. Además estas recorriendo el primer RecordSet en el ciclo del segundo.
Código:
While not rs250.EOF
Set rs251 = Server.CreateObject ("ADODB.RecordSet")
...
While not rs251.EOF
...
rs250.MoveNext
rs251.MoveNext
Wend
Wend
rs250.close
rs251.close
Set rs250 = Nothing
Set rs251 = Nothing
cn250.Close
Set cn250 = Nothing
Arregla lo del objeto y corrige la lectura de los recorSet:

Código:
While not rs250.EOF
   While not rs251.EOF
      ....
      rs251.MoveNext
   Wend
   rs250.MoveNext
Wend
Saludos

Última edición por Myakire; 02/12/2004 a las 14:24
  #6 (permalink)  
Antiguo 02/12/2004, 14:58
 
Fecha de Ingreso: septiembre-2003
Mensajes: 24
Antigüedad: 20 años, 8 meses
Puntos: 0
gracias myakire,¿a que te refieres por objeto?...disculpa ,ando bastante verde en asp

Modifiqué los movenext como dijiste y ahora no me da el error ,pero no me enseña ningún registro de la tabla

saludos
  #7 (permalink)  
Antiguo 02/12/2004, 15:07
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
Cita:
¿a que te refieres por objeto?...
Pues a una instancia de una clase
Bueno, ya en serio, me refería que con la instrucción Set rs251 = Server.CreateObject ("ADODB.RecordSet") creas un objeto, pero no lo destruyes hasta que sale de los dos ciclos (Set rs251 = Nothing). Solo ha eso.

Cita:
Modifiqué los movenext como dijiste y ahora no me da el error ,pero no me enseña ningún registro de la tabla
hijole, eso si va a estar dificil el saber por que , ya sea por que nunca regresa registros la consulta a rs251 o por los IF's o los campos.
Para que te sea más fácil sulucionarlo, que te parece se haces lo que verinchi te recomendó e identas un poco tu código.

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 23:53.