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

Problema con rangos, cargando excel en asp

Estas en el tema de Problema con rangos, cargando excel en asp en el foro de ASP Clásico en Foros del Web. Buenas a todos Estoy tratando de hacer una carga de un fichero excel en una pagina asp, se trata de un fichero de unos 20.000 ...
  #1 (permalink)  
Antiguo 04/01/2008, 02:22
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con rangos, cargando excel en asp

Buenas a todos
Estoy tratando de hacer una carga de un fichero excel en una pagina asp, se trata de un fichero de unos 20.000 registros, por lo que intento partirlo en tramos para poder mostrarlo sin que me de un script timeout.
El problema es que no consigo que el recordset que va recogiendo los distintos rangos me los recoja a medida que los voy cambiando.
Para que quede más claro aqui va un trozo del codigo

do while rango < cant_registros
Mostrar(parcial)
rango=rango+parcial
loop

Sub Mostrar(parcial)

Response.Write("<br> RANGO: "&parcial&"<br>")
'Inicializamos un nuevo recordset y una nueva conexion a la BD con los parametros calculados en la funcion Calcular
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &"Data Source="& Path &";" & "Extended Properties=""Excel 8.0;"""
Dim strSql
Dim range
'En donde recojeremos los datos del excel con el rango especificado en la función
strSql = "SELECT * FROM [ARTICULOS$A"& rango &":E"& rango + parcial&"] order by codigo"

Response.Write strSql &"</br>"
Set rsXls = Server.CreateObject("ADODB.Recordset")
rsXls.Open strSql, conn
response.write("<table border=1 align=center> ")
rsXls.Movefirst
Do While Not rsXls.EOF
i=i+1
Response.Write "<tr>" & vbCrLf
Response.write "<td>" & rsXls(0) & "</td>"
Response.Write "<td>" & rsXls(1) & "</td>"
Response.Write "<td>" & i & "</td>"
Response.Write "</tr>" & vbCrLf
rsXls.MoveNext
Loop
Response.Write "</table>"
Response.Flush()
conn.close
set conn= Nothing

set rsXls = Nothing
End sub
Donde parcial es el número de registros que quiero cargar por tramo

Un saludo a todos y gracias por anticipado
  #2 (permalink)  
Antiguo 04/01/2008, 09:19
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problema con rangos, cargando excel en asp

y rango cuanto vale??

por que solo le mandas el parametro de salida mas no el inicial
como puede saber el codigo, de donde a donde subio, o ya leyo, si no tiene un inicio???

creo que deberias parametrizar tambien el inicio contra el fin de rango de celdas que deseas subir a la pagina

ademas por que tienes declarada una variable "RANGE" si la que tienes es "RANGO"

__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 04/01/2008, 09:27
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con rangos, cargando excel en asp

Lo de range es un error, sorry
El rango lo tenia definido más arriba. Rango esta inicializado en cero y va se va acumulando ya que quiero mostrar el excel por tramos
rango=0
do while rango < cant_registros
Mostrar (parcial)
rango=rango+parcial
loop

Mostrar parcial , es la funcion que puse antes, y cant_registros es el numero de registros que tienen el recordset

Gracias
  #4 (permalink)  
Antiguo 04/01/2008, 09:34
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problema con rangos, cargando excel en asp

si esto es, entonces deberia ser asi mejor, no crees?

Cita:
rango=0
do while rango < cant_registros
Mostrar (rango, parcial)
rango=rango+parcial
loop
y dentro de la funcion
Cita:
Sub Mostrar(inicio, fin)

Response.Write("<br> RANGO: " & fin & "<br>")
'Inicializamos un nuevo recordset y una nueva conexion a la BD con los parametros calculados en la funcion Calcular
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &"Data Source="& Path &";" & "Extended Properties=""Excel 8.0;"""
Dim strSql
Dim range
'En donde recojeremos los datos del excel con el rango especificado en la función
strSql = "SELECT * FROM [ARTICULOS$A"& inicio &":E"& fin &"] order by codigo"

Response.Write strSql &"</br>"
Set rsXls = Server.CreateObject("ADODB.Recordset")
rsXls.Open strSql, conn
response.write("<table border=1 align=center> ")
rsXls.Movefirst
Do While Not rsXls.EOF
i=i+1
Response.Write "<tr>" & vbCrLf
Response.write "<td>" & rsXls(0) & "</td>"
Response.Write "<td>" & rsXls(1) & "</td>"
Response.Write "<td>" & i & "</td>"
Response.Write "</tr>" & vbCrLf
rsXls.MoveNext
Loop
Response.Write "</table>"
Response.Flush()
conn.close
set conn= Nothing

set rsXls = Nothing
End sub
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #5 (permalink)  
Antiguo 08/01/2008, 02:20
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con rangos, cargando excel en asp

Gracias por la respuesta, pero me temo que aún asi no me ejecuta las querys a medida que van cambiando los rangos. Me devuelve los valores de la primera query que hace gracias a que he puesto un Flush.
  #6 (permalink)  
Antiguo 08/01/2008, 09:40
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problema con rangos, cargando excel en asp

los valores de los parametros de la funcion, se mantienen iguales ? no hay incremento?
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #7 (permalink)  
Antiguo 08/01/2008, 10:52
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
Re: Problema con rangos, cargando excel en asp

Es mi imaginación o lo que intentas hacer no es más que un paginado de registros?, ¿no es más sencillo?
  #8 (permalink)  
Antiguo 11/01/2008, 03:07
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con rangos, cargando excel en asp

Myakire, se trata de conseguir que me cargue el excel por tramos, para llevar a cabo una actualización de datos obtenidos de ese excel, es en cierto modo similar a una paginación.
Intento cargarlo por tramos por que debido a su peso cuando se pone a ejecutarlo provoca un Script Timeout.
Además no puedo modificar el tiempo que tiene para ejecutar el script, cosa que sería la solución más óptima.

Shiryu_Libra, el problema lo encuentro en lo que es ejecutar la select, los valores los muestra aumentando al hacer un Response.Write strSql = "SELECT * FROM [ARTICULOS$A"& rango &":E"& rango + parcial&"] order by codigo"
pero no ejecuta la sentencia
  #9 (permalink)  
Antiguo 11/01/2008, 14:45
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
Re: Problema con rangos, cargando excel en asp

mmmm ..... intentas cargarlos por tramos ...... creo entender que lo que quieres es que en lugar de leer los 20000 registros en una sola llamada al servidor, hacer X llamadas en 20000/X veces ¿es así?, si esto es cierto creo que es la primera vez que veo que alguien pretenda darle solución a la consecuencia (el error de timeout) en lugar de al problema (mostrarle tantos registros al usuario); debes valorar en lo inútil que es para el usuario el tener una grilla con 20,000 registros, al usuario se le entregan solo aquellos que va a consultar o a actualizar, para ello se le colocan filtros y/o totalizados para que solo vea aquello que le es de utilidad, pero en fin.

para hacerlo eso yo lo haría de esta forma:

Código:
<%
    Dim sSourceXLS

    sSourceXLS = Server.MapPath(".") & "..\Excel\RollosCosteados.xls"
 
    Dim oConn
    Set oConn = Server.CreateObject("ADODB.Connection")
    oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=" & sSourceXLS & ";" & _
               "Extended Properties=""Excel 8.0;HDR=YES;"""

		TotBloque = 1000
		RegBloque = 100
		Inicio = 1
    Dim oRS
    Set oRS = Server.CreateObject("ADODB.Recordset")
		
		%>
		<table width="100%" border="1">
		<%
		For j=1 to TotBloque / RegBloque
       Fin = RegBloque * j
       oRS.Open "Select * from [Rollos$A" & Inicio & ":Y" & Fin & "]", oConn, 1, 3
       Do While Not (oRS.EOF)
   		%><tr><%
           For i = 0 To 24
               		%><td><%=oRS.Fields(i).Value%><%
           Next
           oRS.MoveNext
       Loop
       oRS.Close
			 Inicio = i * RegBloque + 1
		Next
		%>
		</table>
		<%
    
    Set oRS = Nothing
    
    oConn.Close
    Set oConn = Nothing
%>
Eso lo hice a la primera y funciona, claro, pero el tiempo de respuesta es sin duda perceptiblemente mayor que si la lectura hubiera sido en una sola pasada.
  #10 (permalink)  
Antiguo 11/01/2008, 15:05
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problema con rangos, cargando excel en asp

Código PHP:
       Do While Not (oRS.EOF)
           %><
tr><%
           For 
0 To 24
                       
%><td><%=oRS.Fields(i).Value%><%
           
Next
           oRS
.MoveNext
       response
.Flush() <----Esto???
       
Loop 
y si le agregamos el Flush() Sensei, no acelerara un poco el proceso???
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #11 (permalink)  
Antiguo 11/01/2008, 15:30
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
Re: Problema con rangos, cargando excel en asp

Así como esta la presentación de los datos no serviría de nada ya que el browser no desplegará la tabla hasta que encuentre la etiqueta </table>, recuerdo ese tema del flush ya se había tocado hace mucho y en eso caímos en cuenta en ese entonces, supongo que es por que hasta ese momento sabe el browser si no hay colspan o rowspan que afecten la forma en que se despliegue.

Yo insisto, que lo que se debe hacer es regresar solo lo que el usuario necesita ver, este método es mucho más lento ya que hace N conexiones al origen de datos y recordemos que en cada conexión se trae todos (los 20000 reg por vez) y luego el ASP ya los filtra y les regresa al browser los que se le pidieron, pero por lo pronto si son "tres bloques" el ASP va a lidiar con 60000 en lugar de 20000. Deja busco info sobre este dato.
  #12 (permalink)  
Antiguo 07/02/2008, 03:25
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: Problema con rangos, cargando excel en asp

Lo primero, pedir disculpas por a ver tardado tanto en responder. Lo segundo agradecer todas las respuestas, dadas, y lo tercero comentar que al final hemos solucionado el tema, evitándo cargar todos los registros....aunque me sigue picando la curiosidad de saber como arreglarlo.

Finalmente le hicimos a la aplicación un actualizador online, de todos los registros y como funciona pues arreglado, nada de excel para abajo excel para arriba... que se le va a hacer.

Gracias a todos
  #13 (permalink)  
Antiguo 07/02/2008, 08:22
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
Re: Problema con rangos, cargando excel en asp

Hubieras podido presentarlos no en una tabla, sino en un DIV y con eso el .flush si hubiera funcionado para mostrarte registros conforme se fueran mandando al cliente (claro que en una sola lectura), esto junto con unos cambios al Server.ScriptTimeout y al CommandTimeout del objeto Connection te hubieran servido.
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:57.