MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Do While em Loop

    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty [Resolvido]Do While em Loop

    Mensagem  Finformática em 5/5/2020, 21:31

    Caros amigos,

    Estou quebrando a cabeça com esse código. O Do While está em loop. O código não termina. Onde está errado. Ler uma tabela que tem 30 registros e atualiza alguns campos dependendo de certas condições. Mas o problema do caso é o loop.

    Private Sub Comando10_Click()

    Dim db As Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb()


    Set rs = db.OpenRecordset("SELECT * FROM [ValorMoedaY]")

    Dim AcumulaX As Long
    Dim DescAcumulaX As Long
    Dim GuardaValorX(100) As Long
    Dim IndiceX As Long
    Dim IndiceAntX As Long
    Dim AcumX As Long
    Dim I As Long


    AcumulaX = 0
    DescAcumulaX = 0
    IndiceX = 0
    IndiceAntX = 0
    AcumX = 0
    I = 0

    rs.MoveFirst

    Do While Not rs.EOF

    rs.Edit
    IndiceX = IndiceX + 1
    GuardaValorX(IndiceX) = rs![ValorY]
    AcumulaX = AcumulaX + rs![ValorY]
    If IndiceX = 14 Then
    rs("CalculoValor") = Round((AcumulaX / 14), 4)
    rs.Update
    rs.Requery
    End If
    MsgBox "IndiceX: " & IndiceX & Chr(13) & "GuardaValorXI: " & GuardaValorX(IndiceX) & Chr(13) & "ValorX: " & rs![ValorY] & Chr(13) & "AcumulaX: " & AcumulaX


    rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing

    Exit Sub
    trata_erro:

    Call MsgBox("Erro nº " & Err.Number & " - " & Err.Description)

    'MsgBox "Cálculo concluído com sucesso..."

    End Sub


    Alguém pode ajudar?

    Muito grato, abraços

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2136
    Registrado : 22/11/2016

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  DamascenoJr. em 5/5/2020, 21:48

    [Resolvido]Do While em Loop Tire_o10

    Já ouviu o ditado "foi namorar perdeu o lugar"? Pois é, é isso que o requery está fazendo.
    Esse trecho está fazendo "os olhos" do VBA se voltar para o início do conjunto de registros e sempre começar as verificações.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Finformática em 5/5/2020, 22:01

    Grande Mestre,

    Muito grato pela aula. Tem horas que dá um branco e só fico procurando em outro local achando ser coisa mais complicada.

    Muito grato mais uma vez.

    Grande abraço

    Resolvido

    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2136
    Registrado : 22/11/2016

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  DamascenoJr. em 5/5/2020, 22:09

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Finformática em 5/5/2020, 22:29

    Caro Damasceno,

    Aproveitando o mesmo código dei-me mais uma luz.
    Estou querendo fazer uma média aritmética dos 14 últimos registros. Dizendo melhor, a primeira parte desse cálculo já está fazendo quando chega no registro 14, conforme está no código já enviado. Quero que os próximos registros façam a média de cada 14 registros anteriores. Melhorando, no 15º registro some os valorY do registro 2º até 15º, do 3º até 16º, daí por diante. Sempre dividindo por 14. Do primeiro até 14º foi feito com facilidade pois tinha que ter 14 registros para fazer a média.
    Estou tentando com um For mas fura. Pode ajudar. Veja código abaixo:
    Este Round também não funciona: Round((AcumulaX / 14), 4)

    Private Sub Comando10_Click()

    Dim db As Database
    Dim rs As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim rsV As DAO.Recordset
    Set db = CurrentDb()
    Dim contaReg As Integer

    Set rs = db.OpenRecordset("SELECT * FROM [ValorMoedaY]")
    Dim AcumulaX As Long
    Dim DescAcumulaX As Long
    Dim GuardaValorX(100) As Long
    Dim IndiceX As Long
    Dim IndiceAntX As Long
    Dim AcumX As Long
    Dim I As Long


    AcumulaX = 0
    DescAcumulaX = 0
    IndiceX = 0
    IndiceAntX = 0
    AcumX = 0
    I = 0

    rs.MoveFirst
    Do While Not rs.EOF

      rs.Edit
          IndiceX = IndiceX + 1
          GuardaValorX(IndiceX) = rs![ValorY]
          AcumulaX = AcumulaX + rs![ValorY]
          If IndiceX = 14 Then
             rs("CalculoValor") = Round((AcumulaX / 14), 4)
             rs.Update
             'rs.Requery
          End If
          'MsgBox "IndiceX: " & IndiceX & Chr(13) & "GuardaValorXI: " & GuardaValorX(IndiceX) & Chr(13) & "ValorX: " & rs![ValorY] & Chr(13) & "AcumulaX: " & AcumulaX
          'For i to Indicex AcumX = AcumX + GuardaValorX(I)
         
          If IndiceX > 14 Then
              I = I + 1
              For X = I To IndiceX
              AcumX = AcumX + GuardaValorX(X)
              Next X
              rs("CalculoValor") = Round((AcumX / 14), 4)
              AcumX = 0
              rs.Update
         
          End If
         
                           
                                   
    rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
    'rs2.Close
    'Set rs2 = Nothing
    db.Close
    Set db = Nothing

    MsgBox "Cálculo concluído com sucesso...Tecle ENTER"

    'MsgBox "TERMINADO..."

    Exit Sub
    trata_erro:
       
     Call MsgBox("Erro nº " & Err.Number & " - " & Err.Description)

    'MsgBox "Cálculo concluído com sucesso..."
    End Sub

    Espero ter sido explícito o suficiente para que possa me ajudar.

    Muito grato. Grande abraço.


    Última edição por Finformática em 6/5/2020, 17:58, editado 1 vez(es)
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Finformática em 6/5/2020, 01:54

    Grande Damasceno,

    Você que viu o código anteriormente, quebra mais esse código. Acho que fazendo isso resolvo um problema de amigo aqui do forum que batalha na resolução tem mais de duas semanas.

    Obrigado

    Já morei na tua terra.

    Abraços
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7670
    Registrado : 05/11/2009

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Alexandre Neves em 6/5/2020, 10:35

    Bom dia
    Finformatica, estou perplexo com a sua dúvida em cascata. Primeiro, julguei que era sua dúvida; depois, disse-me que era para ajudar um colega; depois, era para também tirar sua dúvida; depois, ficou esclarecido; agora, ainda anda a dúvida.
    Fico sem saber se tem a dúvida ou se está a ajudar a tirar a dúvida


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Finformática em 6/5/2020, 13:31

    Caro Alexandre,

    Vou tentar ser mais explícito ao repeti o que já citei. Fazendo um breve histórico: alguns dias atrás um amigo nosso aqui do fórum postou uma questão em que queria ver como fazer uma consulta ou um código para resolver seu problema. Fiz a consulta, enviei, fiquei tentando fazer o código. Como não estava dando certo, pedi ajuda aqui. Neste decorrer o amigo que tinha o problema deu sua questão como resolvida. Mesmo assim continuei com minha dúvida (o código) que me interessei para aprendizado próprio.
    O segundo caso, tentando ajudar outro amigo daqui (tem uma planilha Excel e quer converter para Access, que a princípio eu nem sabia) pediu para fazer uns cálculos de uma coluna baseada em outra. Criei uma tabela e comecei fazer o solicitado. Feito essa coluna pediu a terceira coluna baseada na primeira e segunda, fomos fazendo. Depois enviou-me a planilha e tem muitas colunas ainda para calcular. Na medida que vou tentando fazer tem partes que não consigo e peço ajuda aqui. São coisas bem parecidas, relacionadas a uma mesma planilha, cálculos diferentes. Com isso vou aprendendo e muito. Mesmo resolvendo de um modo quero ver como faz de outro modo, Aprendizado.
    Inclusive já teve sugestões que recebi daqui usando função, sql, consulta, tentei converter tudo para código e ainda não consegui. É o pedido acima.
    Espero que tenha me entendido. Estou querendo aprender mais, usando essas dúvidas vou exercitando, ajudando, aprendendo.

    Muito grato pela compreensão.

    Grande abraço
    Finformática
    Finformática
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 590
    Registrado : 23/03/2010

    [Resolvido]Do While em Loop Empty Re: [Resolvido]Do While em Loop

    Mensagem  Finformática em 6/5/2020, 18:15

    Caros Amigos,

    A solicitação acima já consegui resolver. Muitos grato a todos que tiveram paciência comigo e me ajudaram. Só resta a forma correta de definição de Dim GuardaValorX(100) As Long.

    Muito grato

    Grande abraço

      Data/hora atual: 6/8/2020, 21:37