Foros del Web » Programando para Internet » ASPX (.net) »

Implementar una barra de progreso cuando cargan datos de la base de datos

Estas en el tema de Implementar una barra de progreso cuando cargan datos de la base de datos en el foro de ASPX (.net) en Foros del Web. Hola gente El tema es asi: Tengo muchas consultas SQL que va avanzando, se va ejecutando es decir, progresa Quiero que ese progreso se vea ...
  #1 (permalink)  
Antiguo 25/05/2009, 18:13
 
Fecha de Ingreso: abril-2006
Ubicación: Santiago ,Chile
Mensajes: 169
Antigüedad: 18 años, 1 mes
Puntos: 0
Implementar una barra de progreso cuando cargan datos de la base de datos

Hola gente

El tema es asi: Tengo muchas consultas SQL que va avanzando, se va ejecutando es decir, progresa

Quiero que ese progreso se vea en una barra, porque como hay un par de consultas que toman bastante (baaaaaaasssssssssssttaaaaaaaaaannnnnnnnnteeeeeeee , para marcar el punto) estaria bueno que diga cuanto va, y lo mas importante, cuanto falta.

¿Alguien tiene idea de como puedo hacer esto?

Por si importa aclaro que el motor SQL es un SQL Server 2005





Saludos

Última edición por sabao; 25/05/2009 a las 18:19
  #2 (permalink)  
Antiguo 25/05/2009, 18:27
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: Implementar una barra de progreso cuando cargan datos de la base de datos

Bueno nunca se me ocurrio hacer eso y me dejas con la intriga de si se puede tambien....
Voy a buscar info...

Esa imagen que tenes de "cargando" se puede implementar facilmente con ajax en un progress, pero una barra que sea fiel al progreso mmmm.....

Algun guru por ahi :) ?

Veremos.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #3 (permalink)  
Antiguo 25/05/2009, 19:04
 
Fecha de Ingreso: abril-2006
Ubicación: Santiago ,Chile
Mensajes: 169
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: Implementar una barra de progreso cuando cargan datos de la base de datos

Cita:
Iniciado por mdavila Ver Mensaje
Bueno nunca se me ocurrio hacer eso y me dejas con la intriga de si se puede tambien....
Voy a buscar info...

Esa imagen que tenes de "cargando" se puede implementar facilmente con ajax en un progress, pero una barra que sea fiel al progreso mmmm.....

Algun guru por ahi :) ?

Veremos.
hola sip es facil cuando tu ´puedes parar el tiempo con la herramienta update panel
pero con sincronizacion con una consulta sql , seria muy bueno saberlo , saludos
  #4 (permalink)  
Antiguo 26/05/2009, 00:51
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Implementar una barra de progreso cuando cargan datos de la base de datos

Hola muchachos, os cuento un poco lo que sé y lo que me sucde a mi.

Yo, dependiendo de lo que haga, trato este tema de dos formas (os pongo 3 porque una de ella no funciona, aunque seria la mas logica)

- Primera. En su momento se me ocurrió que lo más sencillo sería poner un gif animado que sea una barra de tiempo, de manera que mientras se ejecuta la consulta y demás procesos, muestro el gif. Por supuesto esto no funciona, ya que el gif comienza a moverse, pero en el momento es que el ordenador commienza sus gestiones y se pone a pensar, el gif se para y deja de moverse.
Por lo tanto esta observacion se descarta.

- Segunda: (es la cutre pero mas sencilla) Te creas una toolbar, y la vas cargando a mano, poco a poco entre procesos y proceso. De manera qeu al empezar le pones a mano a la barra qeu este en estado 2 (de 10), al ejecutarse el primer proceso, que pase al estado 4, al ejecutarse el tercero, que pase al 8 y despues que se desvisualice. Fácil sencillo y cutre.

- Tercera. (es la mejor, pero conlleva sus pormenores)
Esta opcion consiste en usar el objeto BACKGROUNDWORKER
Este objeto lo qeu hace es que te ejcuta los procedimientos qeu tu quieras en segundo plano. Qué quiere decir esto, qeu mientras que el procedimiento está ejecutandose, tu puedes hacer otras cosas. Tanto es así, que mientras el proceso se ejecuta tu puedes segui jugando con el panelito que te has creado dandole alos botnoes, etc etc etc.
PEGAS: Para mi tiene dos: La primera, como os comentaba antes, mientras que el proceso se ejcuta el usuario puede seguir trasteando 8con el consiguiente peligro que puede tener eso de cruce d eprocesos, eventos, et etc etc) Por lo tanto, siempre que uso este objeto, deshabilito todos aquellos botoes, o eventos que el usuario pueda ejecutar que me puedan causar problemas. Termando el proceso, los vuelvo a ejecutar.
Y segundo: Puesto que el proceso se hace en segundo plano, dentro de él no puedes llamar a ningún elemento del panel en el que estas, es decri, si quieres capturar el texto del formulario (dentro del proceso, se entiende), no puede llamarlo tal cual, si no que al declarar el proceso, has depasarle sicho valor en una variable.
NOTA: esto vale para barras de progeso continuas y no para las progresivas.

Espero que os haya quedado un poquito claro.
Os adjunto ademas un trozo de codigo para qeu os imagineis como es:


Cita:
'este es el codigo qeu pongo en el boton que ejecuta la consulta
proceso_seg_plano_insertar_datos_hist()


' como os decia, en esta funcion asigno los valores de mis panel a variables, para poder usarlos despues en el objeto backgroundworker

Public Sub proceso_seg_plano_insertar_datos_hist()
'*** VER BACKGROUNDWORKER1 ***
habilitar_deshabilitar_campos(False)
Me.btt_salir.Enabled = False
'Aqui es dodne muestro la barra de proceso. uso la qeu es como el coche fantastico.
Me.ProgressBar1.Visible = True
'metemos en variables los datos del panel. hacemos esto porque una vez iniciado el proceso no se podran usar
v_fechaini = Me.txt_desde.Text
v_preciosob = Me.txt_diassob.Text
Me.DataGridView1.Enabled = False

' Comenzar trabajo en segundo plano
Me.BackgroundWorker1.RunWorkerAsync()
' Esperar a que acabe el proceso en segundo plano
While Me.BackgroundWorker1.IsBusy
' Mantiene funcionando los demás procesos para que el formulario siga respondiendo
Application.DoEvents()
End While
Me.ProgressBar1.Visible = False
habilitar_deshabilitar_campos(True)
Genera_Mensaje(1, "Inserción realizada. Se han producido " & errores_carga_datos & " errores durante la carga de datos")
gestion_boton_errores()
Me.btt_salir.Enabled = True
Me.DataGridView1.Enabled = True
End Sub



'Y este es el codigo del procedimiento del backgrounworker

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
' IMPORTANTE : No acceder al objeto situado en el formulario directamente
' en su lugar utilizar la referencia que llega desde el parámetro sender
' Coje el BackGroundWorker que ha iniciado este evento (sender)
Dim bw As BackgroundWorker = CType(sender, BackgroundWorker)

' Comenzar operaciones deseadas en segundo plano
insertar_datos_historial()
If bw.CancellationPending Then
e.Cancel = True
End If
End Sub

Pues eso es todo.
Menuda clarla que os he dado.

Espero haya servido de ayuda. Si quereis saber mas sobre el BACKGROUNDWORKER, ya sabeis a buscar un poquito por el google!!!!!

Buen dia.
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 03:56.