elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Bucles.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Bucles.  (Leído 2,599 veces)
mdg

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Bucles.
« 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.


En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Bucles.
« Respuesta #1 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.


En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
elmaro


Desconectado Desconectado

Mensajes: 301


Unas simples palabras...


Ver Perfil
Re: Bucles.
« Respuesta #2 en: 27 Agosto 2007, 20:08 pm »

cobein seguramente lo de

Código:
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

Código:
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
En línea

mdg

Desconectado Desconectado

Mensajes: 73


Ver Perfil
Re: Bucles.
« Respuesta #3 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.-
En línea

elmaro


Desconectado Desconectado

Mensajes: 301


Unas simples palabras...


Ver Perfil
Re: Bucles.
« Respuesta #4 en: 28 Agosto 2007, 15:54 pm »

me alegro por ti
cualquier duda pregunta :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con bucles
Programación C/C++
NLkurosaki 2 2,531 Último mensaje 13 Diciembre 2010, 16:55 pm
por NLkurosaki
Iconos de los programas??/Bucles?
Programación C/C++
prometheus48 1 2,053 Último mensaje 10 Octubre 2011, 05:21 am
por naderST
No hay separadores de bucles en VS ???
Programación C/C++
x64core 1 1,867 Último mensaje 10 Octubre 2011, 04:03 am
por seba123neo
Bucles y arrays en Microsoft Access (VBA)
Programación Visual Basic
Lecram 5 7,402 Último mensaje 31 Enero 2012, 17:50 pm
por MCKSys Argentina
Ayuda con bucles VB 2010 « 1 2 »
.NET (C#, VB.NET, ASP)
juanlulete 17 9,175 Último mensaje 22 Julio 2012, 11:32 am
por juanlulete
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines