Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/01/2011, 09:22
Avatar de Javier01
Javier01
 
Fecha de Ingreso: febrero-2008
Ubicación: Montevideo
Mensajes: 261
Antigüedad: 16 años, 9 meses
Puntos: 31
Exclamación ¿Bug de ASP? Encuentra el error

Buenas a todos
Tengo un pequeño problema con un código asp;
En si son 2 funciones, una de esas llama a la otra, la cual le paso una variable por referencia.

Bueno el código es esté


Código ASP:
Ver original
  1. <!-- #include file="ArchivoConexion.asp" -->
  2.  
  3. <%
  4. call AbrirConexionBD
  5. sSQL= "SELECT * FROM tabla WHERE campoclavpri = 1 "  
  6. variable = GetRatingInfo (sSQL)
  7.  
  8. Function GetRatingInfo(sSQL)
  9.     Set rs = Conexion.Execute(sSQL) 'Ejecuto consulta que devuelve una fila
  10.     If Not rs.EOF Then
  11.         While Not rs.EOF    'Mientras que no termine (al tener 1 fila recorre una única vez)
  12.             Response.Write "Fields.Count value: " & rs.Fields.Count & "<br/>"  
  13.             For i=0 To rs.Fields.Count -1   'recorro los valores de esa fila
  14.            
  15.                 tamaarray =  Push (arrResult,rs(i)) 'le paso a la funcion push una variable por referencia, y un dato o valor
  16.                
  17.                 Response.Write "Item "& i & " value: " & rs(i) & "<br/>"
  18.                 Response.Write "arrResult "& i & " value: " & arrResult(i) & "<br/>" ' ACA, DENTRO DEL FOR, EL INDICE 0 DEL ARRAY ANDA
  19.                 response.flush()
  20.                
  21.             Next
  22.             Response.Write "arrResult "& 0 & " value: " & arrResult(0) & "<br/>" ' ACA, FUERA DEL FOR, EL INDICE 0 DEL ARRAY DA ERROR
  23.             rs.MoveNext
  24.         Wend
  25.     End If
  26.     GetRatingInfo = arrResult
  27. End Function
  28.  
  29. Function Push(ByRef mArray, ByVal mValue) ' función que recibe una variable y un valor
  30.  
  31.     If IsArray(mArray) Then 'si la variable es una array
  32.         If isnull(mValue) Then mValue = "NULL"
  33.         Redim Preserve mArray(UBound(mArray) + 1)   ' agrando el array y
  34.         mArray(UBound(mArray)) = mValue ' le pongo el valor
  35.     Else ' si la variable no es un array
  36.         If isnull(mValue) Then mValue = "NULL"
  37.         mArray = Array(mValue) ' la convierto en array y le pongo el valor (que se asigna a la posicion 0)
  38.  
  39.         'Redim Preserve mArray(0)   ' SOLUCIÓN AL ERROR
  40.         'mArray(0)= mValue          ' SOLUCIÓN AL ERROR
  41.     End If
  42.     Push = UBound(mArray) ' devuelvo el tamaño del array (no lo uso)
  43. End Function


Esta variable que se modifica por ser pasada por referencia es un array, que se va generando al recorrer un recordset.
A medida que le agrego los elementos voy mostrando en pantalla que el array esta funcionando bien.
El problema surge que cuando termino de asignar todos los datos al array, y intento mostrar la posición 0, me da un error:

error '80020009'
Exception occurred.


La solución alternativa que encontré esta comentada en el código
Que es al código:
mArray = Array(mValue)
agregarle
Redim Preserve mArray(0)
mArray(0)= mValue
Que en si no debería cambiar nada; pero con eso funciona.

Yo creo que el error esta en la creación del array de la forma
mArray = Array(mValue), pero no entiendo como primero funciona y luego no.

Las preguntas son:

1 - ¿Cual es el error?
2 - ¿Porque no me da dentro del FOR?
3 - ¿Porque redimencionar el array a las misma cantidad de elementos soluciona el error?
4 - ¿Quienes somos y de donde venimos?

bueno si alguno sabe estas respuestas (principalmente la 4) le agradecería mucho su respuesta!

saludos!
__________________
Tomarse un tiempo para redactar correctamente la pregunta, utilizando los signos de puntuación adecuados, es ganar tiempo y calidad en la respuesta.