Hola amigos!
Tengo en una misma rutina dos bucles, o almenos es lo que intento, uno para recorrer los rst de una tabla e insertar los registros en un listview y otro para hacer correr un progressbar pero no logro hacer que marche, aver si pueden echarme una mano y decirme donde tengo el error:
Dim cuantoshay As Integer
Dim contadorfor As Integer
Dim lrg As Double
Dim intv As Double
Dim ctat As Integer
Dim prct As Integer
Dim sql As String
Dim rst As DAO.Recordset
Dim lstitem As ListItem
Dim indice As Long
Dim empresa As Integer
indice = indice + 1
empresa = Mid(Val(MDIForm1.lblempresa.Caption), 1, 4)
Me.ListView1.View = 3
DBpath = App.Path & "\Datos\tablas.mdb"
strsql = "SELECT * FROM tbl_empleados where empresa=" & empresa
Set db = DBEngine.OpenDatabase(DBpath, False, False, ";pwd=" & MiPass)
Set rst = db.OpenRecordset(strsql)
rst.MoveFirst
rst.MoveLast
cuantoshay = rst.RecordCount
For contadorfor = 0 To cuantoshay - 1
'ACA RECORRO LOS RST Y LOS INSERTO EN EL LISTVIEW PERO SOLO
ME INSERTA EL PRIMERO Y LUEGO NADA
Do Until rst.EOF
Set lstitem = Me.ListView1.ListItems.Add(indice, , rst("legajo"))
ListView1.ListItems(indice).ListSubItems.Add , , Me.txtconcepto.Text
ListView1.ListItems(indice).ListSubItems.Add , , Me.lblconcepto.Caption
rst.MoveNext
Loop
Me.lblporcentaje.Visible = True
Me.progreso.Visible = True
lrg = Me.ancho.Width 'para el ancho total al que debe llegar la barra de progres
intv = lrg / cuantoshay 'valor por cada archivo
ctat = ctat + 1 'valor 1
prct = (ctat / cuantoshay) * 100 'porcentaje 1
Me.progreso.Visible = True
Me.progreso.Width = ctat * intv 'el progreso es desde 1 * intv
Me.lblporcentaje.Caption = prct & " %" 'muestra el porcentaje transcurrido
Next
La barra corre bien por que inserte un msgbox antes del next para constatar que no tuviera el problema ahi pero no, asi que no logro dar con la solucion, por otro lado tambien intente hacer los dos procesos por separado pero en caso de que se produsca un error o inconveniento uno de los procesos terminaria antes que el otro y no se veria profesional, desde ya muchas gracias por su ayuda y por su atencion.
Bueno en realidad no estoy seguro pero mira esto
rst.MoveFirst
rst.MoveLast
^^^^^ En realidad me parece que te carga elultimo registro y nada mas, tendrias que mover el puntero al principio creo.
cuantoshay = rst.RecordCount
For contadorfor = 0 To cuantoshay - 1
'ACA RECORRO LOS RST Y LOS INSERTO EN EL LISTVIEW PERO SOLO
ME INSERTA EL PRIMERO Y LUEGO NADA
Do Until rst.EOF
Set lstitem = Me.ListView1.ListItems.Add(indice, , rst("legajo"))
ListView1.ListItems(indice).ListSubItems.Add , , Me.txtconcepto.Text
ListView1.ListItems(indice).ListSubItems.Add , , Me.lblconcepto.Caption
rst.MoveNext
Loop
Me.lblporcentaje.Visible = True
Me.progreso.Visible = True
lrg = Me.ancho.Width 'para el ancho total al que debe llegar la barra de progres
intv = lrg / cuantoshay 'valor por cada archivo
ctat = ctat + 1 'valor 1
prct = (ctat / cuantoshay) * 100 'porcentaje 1
Me.progreso.Visible = True
Me.progreso.Width = ctat * intv 'el progreso es desde 1 * intv
Me.lblporcentaje.Caption = prct & " %" 'muestra el porcentaje transcurrido
Next
En cuanto al resto del codigo que sugiero que lo mires bien por que esta mal, tenes un for que va de 0 hasta EOF-1 y dentro de eso un loop que va de BOF a EOF, lo que quiere decir que vas a hacer andar el loop tantas veces como registros tengas.
cobein seguramente lo de
rst.MoveFirst
rst.MoveLast
es para depsues poder utilizar el recordcount, ya que en algunas webs dice q folo funciona cuando se esta en el ultimo registro, tonces hay que hacer un rst.MoveLast y que a veces ni asi funciona
yo creo q todo es mie*da, y utilizo algo mas sencillo
asi que mdg utiliza esto para contar los registros, seguro y rapido
rst.Close
rst.Open "select count(*) from TABLA WHERE= condiciones", cnn, adOpenDynamic, adLockOptimistic
TotalReg = Val(rst.GetString)
la variable TotalReg contiene la cantidad de registros.
espero te sirva, adios
Hola muchachos, gracias a ambos, elmaro , gracias por pasarme el codigo para contar registros me viene al pelo,gracias a sus sugerencias pude solucionar la cuestion asi:
Dim cuantoshay As Integer
Dim contadorfor As Integer
Dim lrg As Double
Dim intv As Double
Dim ctat As Integer
Dim prct As Integer
Dim sql As String
Dim rst As DAO.Recordset
Dim lstitem As ListItem
Dim indice As Long
Me.ListView1.View = 3
indice = indice + 1
DBpath = App.Path & "\Datos\tablas.mdb"
strsql = "SELECT * FROM tbl_empleados"
Set db = DBEngine.OpenDatabase(DBpath, False, False, ";pwd=" & MiPass)
Set rst = db.OpenRecordset(strsql)
'Movemos el foco de los registros del inicio al fin
'con el objeto de contarlos lugo
rst.MoveFirst
rst.MoveLast
'Volvemos a mover el foco al primer registro
rst.MoveFirst
cuantoshay = rst.RecordCount
For contadorfor = 0 To cuantoshay - 1
Me.lblporcentaje.Visible = True
Me.progreso.Visible = True
lrg = Me.ancho.Width 'para el ancho total al que debe llegar la barra de progres
intv = lrg / cuantoshay 'valor por cada archivo
ctat = ctat + 1 'valor 1
prct = (ctat / cuantoshay) * 100 'porcentaje 1
Me.progreso.Visible = True
Me.progreso.Width = ctat * intv 'el progreso es desde 1 * intv
Me.lblporcentaje.Caption = prct & " %" 'muestra el porcentaje transcurrido
Set lstitem = Me.ListView1.ListItems.Add(indice, , rst("legajo"))
rst.MoveNext
Next
Osea movia el registro del primero al ultimo para contarlos y luego lo muevo nuevamente al principio antes de comenzar el bucle, gracias nuevamente y pueden cerrar el tema.-
me alegro por ti
cualquier duda pregunta :)