Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema con barra de progreso, label y un proceso laaargo...

Estas en el tema de Problema con barra de progreso, label y un proceso laaargo... en el foro de Programación General en Foros del Web. Hola. Les comento mi problema. Estoy armando un programita que levanta datos de un .dat y los tiene que grabar en un mdb. Los datos ...
  #1 (permalink)  
Antiguo 20/12/2004, 05:33
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Pregunta Problema con barra de progreso, label y un proceso laaargo...

Hola. Les comento mi problema. Estoy armando un programita que levanta datos de un .dat y los tiene que grabar en un mdb. Los datos a exportar son muuuchos. En fin. Decidi poner una barra de progreso y dos labels: uno con el porcentaje y otro con la descripcion del registro que esta grabando actualmente (al estilo de los instaladores vieron?). El problema es que al iniciar el proceso, los labels se ponen invisibles y la barra de progreso avanza, luego de un momento el formulario se pone blanco (¿vieron en Xp cuando se cuelga una aplicacion, que se pone toda la ventana blanca?). Es decir que Windows "cree" que se cuelga la ventana, pero en realidad el proceso sigue corriendo, lo que pasa es que es muy largo, pero la actualizacion de datos la hace correctamente.

¿Como puedo solucionar estos dos problemas (lo de los labels invisibles y lo del formulario en blanco)?

Saludos. Lucas
  #2 (permalink)  
Antiguo 23/12/2004, 16:42
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
lo que podes hacer es ponerle pausas al formulario para que no se trave, entonces te acutaliza todo lo que tenes y lo hace bien y bonito como queres, sin que se sature de procesos...

nos vemos...
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #3 (permalink)  
Antiguo 27/12/2004, 04:26
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Pregunta

¿Y como seria la sintaxis para pausar el proceso?
  #4 (permalink)  
Antiguo 27/12/2004, 09:59
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
podes usar un timer o algo asi...

enviar una parte de tu codigo para ver en que parte se le puede poner un timer..

para faciltarlo..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 27/12/2004, 11:32
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
Parte del codigo

Ok. Aca va una parte del codigo conflictivo

Aclaracion: Archivo es una variable de un tipo definido por mi, CantRegistrosDAT tiene la cantidad de registros del archivo .DAT y PBar es la dichosa barra de progreso...

Código:
FileNum = FreeFile

Do While EOF(FileNum) <> True
   Get FileNum, , Archivo
   If Trim(Archivo.Año) <> "" Then
	  If Left(Trim(Archivo.Año), 1) = "1" Or Left(Trim(Archivo.Año), 1) = "2" Then
		 If X > TPARAMETROS.Fields!Registro.Value Then
			lblHaciendo.Caption = "Actualizando registros de Evapotranspiración del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarEvapo
					
			lblHaciendo.Caption = "Actualizando registros de Heliofanía del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarHelio
				  
			lblHaciendo.Caption = "Actualizando registros de Humedad del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarHumedad
				  
			lblHaciendo.Caption = "Actualizando registros de Precipitaciones del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarPrec
				  
			lblHaciendo.Caption = "Actualizando registros de Temperaturas del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarTemp
				  
			lblHaciendo.Caption = "Actualizando registros de Vientos del día " & Archivo.Dia & "/" & Archivo.Mes & "/" & Archivo.Año
			Call GrabarVientos
		 Else
			lblHaciendo.Caption = "Buscando registros nuevos para actualizar"
		 End If
				
		 X = X + 1
			  
		 lblPorcentaje.Caption = CInt(X * 100 / CantRegistrosDAT) & "%"
		 PBar.Value = CByte(X * 100 / CantRegistrosDAT)
	  Else
		 Exit Do
	  End If
   End If
Loop
Los Subs Grabar... (GrabarEvapo, GrabarHelio, etc...) llaman a otros procedimientos, en donde se guardan en las respectivas tablas los datos correspondientes, por ejemplo en GrabarVientos:

Código:
Private Sub GrabarVientos()
With TVIENTO
   .AddNew
   If Trim(Archivo.ObservacionDeLaVeleta8Hs) <> "" Then
	  .Fields!Veleta8.Value = Archivo.ObservacionDeLaVeleta8Hs
   Else
	  .Fields!Veleta8.Value = Null
   End If
		
   If Trim(Archivo.ObservacionDeLaVeleta14Hs) <> "" Then
	  .Fields!Veleta14.Value = Archivo.ObservacionDeLaVeleta14Hs
   Else
	  .Fields!Veleta14.Value = Null
   End If
		
   If Trim(Archivo.ObservacionDeLaVeleta20Hs) <> "" Then
	  .Fields!Veleta20.Value = Archivo.ObservacionDeLaVeleta20Hs
   Else
	  .Fields!Veleta20.Value = Null
   End If
   

   (etc...)

   .Update 

End With

PD: Perdon por tardar tanto, pasa que mi conexion anda a dos por hora
  #6 (permalink)  
Antiguo 27/12/2004, 12:02
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Exclamación

bueno esto es algo que se viene a la mente... muy probablemente alguien se detenga a darle una pensada mas lenta... pero es una solucion que te doy
Código:
Private Sub GrabarVientos()
With TVIENTO
   .AddNew
   If Trim(Archivo.ObservacionDeLaVeleta8Hs) <> "" Then
	  .Fields!Veleta8.Value = Archivo.ObservacionDeLaVeleta8Hs
   Else
	  .Fields!Veleta8.Value = Null
   End If
		
   If Trim(Archivo.ObservacionDeLaVeleta14Hs) <> "" Then
	  .Fields!Veleta14.Value = Archivo.ObservacionDeLaVeleta14Hs
   Else
	  .Fields!Veleta14.Value = Null
   End If
		
   If Trim(Archivo.ObservacionDeLaVeleta20Hs) <> "" Then
	  .Fields!Veleta20.Value = Archivo.ObservacionDeLaVeleta20Hs
   Else
	  .Fields!Veleta20.Value = Null
   End If

   .Update

End With
Me.Timer1.Interval = 1000 ' en el siguiente proceso serial el nombre del otro timer
Call GrabarVientos

End Sub
'Agrega un Timer
Private Sub Timer1_Timer()
Call GrabarVientos 'Siguiente Proceso
Timer1.Interval = 0
End Sub
' y con el siguiente otro timer tendrias que hacer un timer para cada
' proceso esto es una idea que se me viene a la mente esperemos a ver como te funciona...

espero te sirva

nos vemos...
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #7 (permalink)  
Antiguo 27/12/2004, 12:15
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Lucasimiros:
Sólo agrega la sentencia DoEvents una vez que hayas asignado los nuevos valores de todos los elementos que deben actualizarse.
Esto hará lento el proceso porque el bucle cederá tiempo de procesamiento para actualizar el aspecto de tus objetos en cada iteración del bucle. Pero podrías colocar una variable para actualizar en n cantidad de ciclos, o en n porcentaje.
Creo que el mejor punto para colocar la sentencia es después de:

Código:
...............
 
PBar.Value = CByte(X * 100 / CantRegistrosDAT)
DoEvents
Busca en la documentación de VB, la sentencia está bien explicada.

Saludos.
  #8 (permalink)  
Antiguo 28/12/2004, 04:41
Avatar de lucasiramos  
Fecha de Ingreso: agosto-2004
Ubicación: Santa Rosa, La Pampa, Argentina
Mensajes: 1.484
Antigüedad: 19 años, 8 meses
Puntos: 13
De acuerdo Funciono El Doevents!!!

Bien!!! Anda a la perfeccion, yo ya habia probado antes con DoEvents pero no lo habia puesto despues de actualizar los labels y la barra de progreso... Muchas gracias Beakdan.

Geoavila, muchas gracias tambien por tus respuestas y tu tiempo.

Saludos. Lucas
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 17:16.