• Lunes 23 de Diciembre de 2024, 04:27

Autor Tema:  Re: progressbar  (Leído 2471 veces)

arjmasar

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: progressbar
« en: Miércoles 14 de Agosto de 2002, 18:46 »
0
hola, estoy conectandome a un sistema AS400 por medio de una red de windows 2000, y estoy generando un RecordSet con información del AS400, quisiera utilizar un progressbar par mostrar el avance tanto de la conexion, como de la extraccion de informacion, solo que no se como calcular el max del progressbar ni como darle el valor  a value, pues ya puse el progressbar pero cuando corro el proceso, el programa como que hace una pausa mientras se conecta y realiza el recordset, incluso las etiquetas que he puesto no se ven sino hasta que termina la conexion y generacion del RecordSet, enseguida pongo parte del codigo que estoy usando...

Private Sub imporAS400()
   pbrImport.Value = (pbrImport.Value + 20)
   Dim conImportCtas As ADODB.Connection
   Dim rstImportCtas As ADODB.Recordset
   Dim strImportCtas As String
   
   Set conImportCtas = New ADODB.Connection
   conImportCtas.ConnectionString = "DSN=CENTRO;SYSTEM=CENTRAL;CMT=0;DBQ=FACTULIB;NAM=0;DFT=5;DSP=1;TFT=0;TSP=0;DEC=0;XDYNAMIC=1;RECBLOCK=2;BLOCKSIZE=256;SCROLLABLE=0;TRANSLATE=1;LAZYCLOSE=1;LIBVIEW=0;REMARKS=0;CONNTYPE=2;SORTTYPE=0;LANGUAGEID=ENU;SORTWEIGHT=0;PREFETCH=0;DFTPKGLIB=QGPL;MGDSN=0;"
   conImportCtas.Open
   Set rstImportCtas = New ADODB.Recordset
   rstImportCtas.ActiveConnection = conImportCtas
   rstImportCtas.CursorType = adOpenStatic
   rstImportCtas.LockType = adLockReadOnly
   rstImportCtas.CursorLocation = adUseClient
   rstImportCtas.Open "Select * From UsuarLrt Where SECT = 22 AND NOMBRE Like 'RAMIREZ%'", conImportCtas, adOpenDynamic, adLockOptimistic
   rstImportCtas.MoveFirst
   MsgBox rstImportCtas.Fields("NOMBRE").Value
   rstImportCtas.Close
   conImportCtas.Close
End Sub

de antemano muchisimas gracias por la ayuda....

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
progressbar
« Respuesta #1 en: Miércoles 27 de Noviembre de 2002, 21:24 »
0
Si usas el progressbar dentro del mismo form, siempre tendras el problema que el progressbar no se visualizara hasta el final del proceso.
Lo que te recomiendo, es colocar el progressbar en un form MDI principal, y lo llamas desde el form que ejecuta el proceso.

Para ello, cuando lo pongas en tiempo de diseño, le pongas la propiedad visible=false, y al comenzar el proceso lo cambias a true y al terminar que vuelva a false.

Ahora la pregunta del millon, como lo haces para que avance el progress.

Cuando te conectes, tienes dos alternativas:
a) No mostrar estado de avance de conexion.
b). Dar un time de conexion y ese mismo valor al progressbar.max, y usar un control timer para mostrar el avance durante ese time. No te lo recomiendo, a menos que sepas usar time y desactivarlo despues (es decir, en tiempo de ejecucion)

Una vez realizada la conexion, la primera pregunta que debes hacer a la base de datos, es la cantidad de registros que extraeras de acuerdo a tu filtro en la consulta.

Usa : select count(*) as Cantidad  from <tabla> where <condicion)
Y cuando tengas el valor lo traspasas al progressbar.max y utilizas un contador para ir viendo en que posicion vas, y que porcentaje del total es:

te doy un pseudo codigo para que lo adaptes.

Sentencia="select count(*) as cantidad from MiTabla where Condicion"
Respuesta=Conexion.Sentencia
progressbar.visible=true
progressbar.max=Respuesta->Cantidad
Maximo=Respuesta->Cantidad
Contador=0
while not respuesta.eof
       Contador=Contador+1
       progressbar.value=int(Contador/Maximo)*100
       ** colocar el codigo de tu proceso
       ** avanzar al siguiente registro
wend