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

Capacidad maxima en ciclo FOR.

Estas en el tema de Capacidad maxima en ciclo FOR. en el foro de ASP Clásico en Foros del Web. Buen día foreros. Tengo el siguiente problema con la generación de un reporte en Excel. Según yo es dependiendo el numero de interacciones que tenga ...
  #1 (permalink)  
Antiguo 28/10/2010, 09:01
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 4 meses
Puntos: 0
Exclamación Capacidad maxima en ciclo FOR.

Buen día foreros.

Tengo el siguiente problema con la generación de un reporte en Excel. Según yo es dependiendo el numero de interacciones que tenga mi ciclo For, me marca el error de “Operation not Allowed”. Les pongo de manera general el código que utilizo:

Listado = “1,2,3,4,5,6,7,8,9,10,N”
Separar = Split(Listado, ”,”)

Do While Not lobjRst.EOF

For z=0 to Ubound(Separar)
Response.Write lobjRst(“Campo” & Separar(z))
Next

lobjRst.MoveNext
loop

Tengo dos escenarios. El primero que funciona correctamente es que la consulta regresa 12995 y en mi variable de “Listado” contiene 100 valores.

Entonces 12995 * 100 = 1299500.

Y el otro escenario en el que truena mi reporte es bajo la siguiente condición. La consulta tiene 14713 registros y la variable de “Listado” contiene también 100 valores.

14713 * 100 = 1471300.

Donde creen que este mi error. Como creen que pueda darle solución a este problema.

Gracias por su ayuda.

Saludos.
__________________
Hasta la victoria Siempre.
  #2 (permalink)  
Antiguo 28/10/2010, 09:10
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Capacidad maxima en ciclo FOR.

Que instrucción es la que marca error?
  #3 (permalink)  
Antiguo 28/10/2010, 10:33
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Capacidad maxima en ciclo FOR.

El error que me manda es el siguiente:

Error Type:
Response object, ASP 0104 (0x80070057)
Operation not Allowed
Exportar.asp

Pero no dice ni linea nada, solo que yo depurando y rastreando el código el error se presenta en el "For".

Espero haberme explciado correctamente.

Saludos.
__________________
Hasta la victoria Siempre.
  #4 (permalink)  
Antiguo 28/10/2010, 12:12
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Capacidad maxima en ciclo FOR.

A ver ... vamos encuadrando el error ...

1) Cuantos elementos tiene ese arreglo
2) Cuántos registros tiene el recordSet?
3) El FOR por si solo marca error?
  #5 (permalink)  
Antiguo 28/10/2010, 15:52
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Capacidad maxima en ciclo FOR.

1.- El arreglo tiene 100 elementos.
2.- El RecordSet cuando truena tiene 14713 registros.
3.- Si omito este For ya no truena la generación del reporte en Excel.

Gracias.
__________________
Hasta la victoria Siempre.
  #6 (permalink)  
Antiguo 28/10/2010, 16:46
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Respuesta: Capacidad maxima en ciclo FOR.

Ok, pensé en que se trataba de un error generado al llenarse el buffer, entonces con un .flush se arreglaba.

Hice este código para probar la idea:


Código ASP:
Ver original
  1. <%
  2. set con = Server.CreateObject("ADODB.Connection")
  3. ConnString = "Provider=SQLNCLI10;Server=SERVIDOR;Database=*****;Uid=******;Pwd=*****;Persist security info=true;"
  4. Con.CommandTimeout  = 0
  5. con.Open  ConnString
  6. set rs = Server.CreateObject("ADODB.Recordset")
  7. rs.Open "Select * from Tabla", Con
  8. %>
  9. <table>
  10. <%
  11. Cnt=1
  12. while not rs.EOF
  13.   %><tr><td><%=Cnt%></td>
  14.     <%
  15.     For i=0 To rs.Fields.Count-1
  16.        %>
  17.          <td><%=rs.Fields(i).value%></td>
  18.          <%
  19.     Next
  20.     %></tr><%
  21.     if Cnt MOD 100 = 0 Then
  22.        %></table><table><%
  23.        Response.flush
  24.     end if
  25.     Cnt = cnt + 1
  26.   rs.MoveNext
  27. Wend
  28. rs.Close
  29. set rs = nothing
  30. %>
  31. </table>

y efectivamente eso fue, la tabla a la que accedí tiene alrededor del medio millon de registros (mal ejemplo, se tardó bastantito) y los mostró todos, de 100 en 100 claro esta (también mal ejemplo, debí poner 1000). Si tu no ocupas una tabla puedes colocar el .flush al término del FOR, pero cada registro se estará mandando HTML al cliente, puedes mandarlo cada 1000 registros, creo que es un buen número, pero depende de que tan frecuente quieras que el cliente vaya viendo datos nuevos.

Pero en lo personal creo que esta mal esa idea de presentarle tantos datos en el browser al usuario, digo, ¿de qué le sirve ver más de 14000 registros en la pantalla?, no puede hacer nada con ellos, debería ser algo más depurado y filtrado.

saludos
  #7 (permalink)  
Antiguo 29/10/2010, 09:28
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 4 meses
Puntos: 0
Respuesta: Capacidad maxima en ciclo FOR.

Gracias Myakire por las respuestas.

Y en efecto la consulta que se le muestra al usuario es de 100 en 100 registros no por el total de lo que arroja la consulta. La bronca la estaba teniendo al momento de mandar toda esa información en un archivo en Excel.

Pero quedo resuelta al ponerle la instrucción de Response.Flush.

Gracias y saludos.
__________________
Hasta la victoria Siempre.

Etiquetas: capacidad, ciclos
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:42.