Título: Bucles. Publicado por: mdg en 26 Agosto 2007, 21:55 pm 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. Título: Re: Bucles. Publicado por: cobein en 27 Agosto 2007, 08:33 am 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. Título: Re: Bucles. Publicado por: elmaro en 27 Agosto 2007, 20:08 pm cobein seguramente lo de
Código: rst.MoveFirst 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 Código: rst.Close la variable TotalReg contiene la cantidad de registros. espero te sirva, adios Título: Re: Bucles. Publicado por: mdg en 28 Agosto 2007, 02:57 am 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.- Título: Re: Bucles. Publicado por: elmaro en 28 Agosto 2007, 15:54 pm me alegro por ti
cualquier duda pregunta :) |