MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

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


3 participantes

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    avatar
    SAPMM
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 369
    Registrado : 07/08/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  SAPMM 2/8/2013, 12:22

    Tenho uma tabela “lancamento” onde atualmente tenho um loop para percorrer todos os registros da mesma, só que agora estou tentando fazer um loop considerando um campo que se repete.

    Veja exemplo dos dados na tabela lancamento:


    agrupador    itemagrupador centro     classe           valor
         1                  1               10      101545999      1000
         1                  2               10      101545900        500
         1                  3               10      101545700        500  
         2                  1               10      101545800      1200
         2                  2               10      101545450        700
         2                  3               10      101545650        500

    http://imageshack.us/content_round.php?page=done&l=img546/671/i8f.gif&sa=0

    Campo “agrupador” tipo de dados número inteiro longo
    Campo “itemagrupador” tipo de dados número inteiro longo

    A ideia é colocar um loop dentro do outro, onde terá o loop por número agrupador e o loop geral da tabela. Não consegui fazer o Do until funcionar. Exemplo: Loop primeiro nos registros onde o agrupador é igual, na sequencia faz loop no outro agrupador e assim por diante, até chegar na última linha da tabela.
    O código que utilizo para o loop só considerando as linhas da tabela é o seguinte:

    Dim strSQL As String
    strSQL = "SELECT agrupador, itemagrupador, centro, classe, Valor  FROM Lacamento"
    Set gro = CurrentDb.OpenRecordset(strSQL)
    Do While Not gro.EOF


    Meu código ………………….

    gro.MoveNext
    Loop
    gro.Close
    Set gro = Nothing
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  criquio 2/8/2013, 12:46

    Eu não entendi a finalidade pretendida. O que você precisa é agrupar os dados? Se for, o GROUP BY não resolve? Se não for isso, explique o que realmente precisa acontecer com os dados.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    SAPMM
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 369
    Registrado : 07/08/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  SAPMM 2/8/2013, 13:33

    Criquio,

    A intenção é pegar os dados e enviar com update em uma outra tabela de modo que agrupo os registros, como se fosse um lançamento contábil. De modo que as linhas do agrupador um tive um mesmo número de identificado na outra tabela.
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  criquio 6/8/2013, 13:01

    Ainda está confuso. Como estão os dados e como quer que eles fiquem? Exemplifique para entendermos melhor.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    SAPMM
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 369
    Registrado : 07/08/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  SAPMM 6/8/2013, 13:55

    Os dados na tabela estão conforme campos abaixo:
    agrupador itemagrupador centro classe valor
    1 1 10 101545999 1000
    1 2 10 101545900 500
    1 3 10 101545700 500
    2 1 10 101545800 1200
    2 2 10 101545450 700
    2 3 10 101545650 500

    Onde o campo "Agrupador" deverá ser utilizado para fazer o loop por esse identificador "agrupador" quando não encontrar mais linha com o mesmo agrupador, exemplo agrupador 1, o access sai desse loop e vai para a próxima linha, sempre considerando o agrupador, até chegar na última linha da tabela. Isso é para simular um registro contábil, onde um lançamento será composto por várias linhas agrupadas pelo campo "agrupador".

    No meu exemplo, utilizarei a tabela "lançamento" onde estão os dados, de modo que irei gravar cada lançamento composto pelas linhas da tabela "lançamento" onde o campo "agrupador" é o mesmo, exemplo agrupador=1, e gravar esses registros na tabela "registrolancado" onde além dos campos da tabela "lançamento" terá um novo campo "registrogravado" que será populado com a identificação de cada grupo de lançamento exemplo:

    agrupador itemagrupador centro classe valor Registrolancado
    1 1 10 101545999 1000 Registro1
    1 2 10 101545900 500 Registro1
    1 3 10 101545700 500 Registro1
    2 1 10 101545800 1200 Registro2
    2 2 10 101545450 700 Registro2
    2 3 10 101545650 500 Registro2

    Por fim, mesmo a ideia não parecendo ter sentido, isso faz sentido na minha aplicação, pois gostaria de fazer um loop dentro do outro, onde teria o loop das linhas da tabela e o loop considerando o mesmo id do campo "agrupador", exemplo agrupador =1, agrupador =2, e assim por diante.

    RneoX
    RneoX
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 246
    Registrado : 26/07/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  RneoX 6/8/2013, 13:55

    Está confuso mesmo,
    O que você deseja é atualizar outra tabela conforme os dados que apareceram em uma janela ou tabela, é isso que eu entendi?
    Ou toda vez que você atualizar uma tabela você gostaria que também atualiza-se outra junto?

    Claro, lembrando que você desejaria que grava-se na forma sequencial de grupo e item.


    .................................................................................
    Conhece meus projetos que ajudam os usuários a entender o funcionamento de várias funções encontradas aqui no fórum? também pode usa-lo para seus negócios ou para uso pessoal, não conhece? então visite aqui e veja como está bacana: Projeto Casco do Máximo Access v3.0 (Pré-Release 4.0) 
    Ser livre é ter liberdade para expressar suas idéias,
    Ser diferente é ser especial e o reverso da igualdade,
    Ser criativo é ser poderoso,
    Ter conhecimentos e não dividir-los é ser egoísta e orgulhoso,
    Ensinar é um prazer que todos devem ter por seus alunos, pois é dele que vem nossos troféus.
    avatar
    SAPMM
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 369
    Registrado : 07/08/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  SAPMM 6/8/2013, 13:57

    veja minha explicação acima.
    RneoX
    RneoX
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 246
    Registrado : 26/07/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  RneoX 6/8/2013, 13:59

    como perguntei quase junto já a sua resposta acho que seria nulo as minhas perguntas,

    O Loop pode ser quebrado com um simples If

    Exemplo:

    If grupo = x then
    goto nextloop
    End if

    Você já tem os códigos prontos para que eu possa dar um exemplo?


    .................................................................................
    Conhece meus projetos que ajudam os usuários a entender o funcionamento de várias funções encontradas aqui no fórum? também pode usa-lo para seus negócios ou para uso pessoal, não conhece? então visite aqui e veja como está bacana: Projeto Casco do Máximo Access v3.0 (Pré-Release 4.0) 
    Ser livre é ter liberdade para expressar suas idéias,
    Ser diferente é ser especial e o reverso da igualdade,
    Ser criativo é ser poderoso,
    Ter conhecimentos e não dividir-los é ser egoísta e orgulhoso,
    Ensinar é um prazer que todos devem ter por seus alunos, pois é dele que vem nossos troféus.
    avatar
    SAPMM
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 369
    Registrado : 07/08/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  SAPMM 6/8/2013, 14:49

    Meu código original está como segue, sendo que o segundo loop gostaria de colocar conforme linhas de comentários 1, 2, 3 e 4 sobre o loop. Por mais estranho que pareça, meu código utiliza VBA com VBscript, mas meu problema está somente no loop quebrando por código agrupador, uma vez que no código original faço o loop sem quebrar por código e funciona perfeitamente, então reforço meu problema é só inserir o loop seguindo a quebra por código agrupador, portanto não se preocupem com demais linhas:


       Dim strSQL As String

       
       strSQL = "SELECT agrupador,itemagrupador,datadoc, datalcto, referencia, chave,chave2, contaforn, valor, localnegocios, docCriado,jaexistedoc,tipodoc, textocab, textocompe, blp, atrib, textoitem, fatrelacionada, anofatrel, itemfatrel FROM TabelaInput1"

       Set gro = CurrentDb.OpenRecordset(strSQL)

       Do While Not gro.EOF

    'Comentário 1 sobre o loop: O que gostaria de fazer é que na primeira linha na tabela input1 do código "agrupador 1", irá executar o código abaixo até a linha 170

    10        Sesion.FindById("wnd[0]/tbar[0]/okcd").Text = "/nf-51"
    20        Sesion.FindById("wnd[0]").SendVKey 0
    30        Sesion.FindById("wnd[0]/usr/ctxt[0]").Text = Replace(gro!datadoc, "/", ".")    '"24052013"
    40        Sesion.FindById("wnd[0]/usr/ctxt[1]").Text = gro!tipodoc    '"ab"
    50        Sesion.FindById("wnd[0]/usr/ctxt[3]").Text = Replace(gro!datalcto, "/", ".")    '"240513"
    60        Sesion.FindById("wnd[0]/usr/txt[2]").Text = gro!referencia    '"123"
    70        Sesion.FindById("wnd[0]/usr/txt[4]").Text = gro!textocab    '"ttttttttttttt"
    80        Sesion.FindById("wnd[0]/usr/txt[5]").Text = gro!textocompe    '"ttttttttttttttttttttttttttttt"
    90        Sesion.FindById("wnd[0]/usr/ctxt[7]").Text = gro!chave    '"31"
    100        Sesion.FindById("wnd[0]/usr/ctxt[8]").Text = gro!contaforn    '"100924"
    110        Sesion.FindById("wnd[0]/usr/ctxt[8]").SetFocus
    120        Sesion.FindById("wnd[0]/usr/ctxt[8]").CaretPosition = 6
    130        Sesion.FindById("wnd[0]").SendVKey 0
    140        Sesion.FindById("wnd[0]/usr/txt[4]").Text = gro!Valor    '"1000"
    150        Sesion.FindById("wnd[0]/usr/ctxt[3]").Text = gro!localnegocios    '"0004"
    160        Sesion.FindById("wnd[0]/usr/txt[18]").Text = gro!atrib    '"tttttttttttt"
    170        Sesion.FindById("wnd[0]/usr/ctxt[12]").Text = gro!textoitem    '"tttttttttttttttttttttttttttttttttttttttttttttt"

    'Comentário 2 sobre o loop: Agui começaria o loop a partir da segunda linha do código "agrupador 1" e o loop seguiria até a última linha do código "agrupador 1" conforme linha 350 abaixo

    180        Sesion.FindById("wnd[0]/usr/ctxt[13]").Text = gro!chave2    '"21"
    190        Sesion.FindById("wnd[0]/usr/ctxt[14]").Text = gro!contaforn    '"100924"
    200        Sesion.FindById("wnd[0]/usr/ctxt[14]").SetFocus
    210        Sesion.FindById("wnd[0]/usr/ctxt[14]").CaretPosition = 6
    220        Sesion.FindById("wnd[0]").SendVKey 0
    230        Sesion.FindById("wnd[0]").SendVKey 0    'Se existe documento para lançado para a mesma nota fiscal
    240        Sesion.FindById("wnd[0]/usr/txt[4]").Text = gro!Valor    '"1000"
    250        Sesion.FindById("wnd[0]/usr/ctxt[3]").Text = gro!localnegocios    '"0004"
    260        Sesion.FindById("wnd[0]/usr/txt[13]").Text = gro!fatrelacionada    '"5100001197"
    270        Sesion.FindById("wnd[0]/usr/txt[14]").Text = gro!anofatrel    '"2013"
    280        Sesion.FindById("wnd[0]/usr/txt[15]").Text = gro!itemfatrel    '"1"
    290        Sesion.FindById("wnd[0]/usr/txt[16]").Text = gro!atrib    '"tttttttttttttttttt"
    300        Sesion.FindById("wnd[0]/usr/ctxt[11]").Text = gro!textoitem    '"tttttttttttttttttttttttttt"
    310        Sesion.FindById("wnd[0]/usr/ctxt[11]").SetFocus
    320        Sesion.FindById("wnd[0]/usr/ctxt[11]").CaretPosition = 9
    330        Sesion.FindById("wnd[0]").SendVKey 0
    340        Sesion.FindById("wnd[0]").SendVKey 0
    350        Sesion.FindById("wnd[0]").SendVKey 0
           
    'Comentário 3 sobre o loop:Aqui o loop chegou na última linha do código "agrupador 1" então segue para a linha 360

    360        Sesion.FindById("wnd[0]/tbar[0]/btn[11]").Press
    370        Sesion.FindById("wnd[0]").SendVKey 0
    380        Sesion.FindById("wnd[0]").SendVKey 0  'Se existe documento para lançado para a mesma nota fiscal


    390        If Trim$(Right(Sesion.FindById("wnd[0]/sbar").Text, 26)) = "registrado na empresa UHBM" Then

               'salva na tabela o nr do documento criado no sap
    400            gro.Edit
    410            gro!docCriado = Trim$(Right(Left(Sesion.FindById("wnd[0]/sbar").Text, 20), 10))
    420            gro.Update
               'Documento 100016980 registrado na empresa UHBM

    430        End If

    ' Comentário 4 sobre loop: aqui move para o próximo agrupador na tabela e inicia o loop no próximo agrupador indo para a linha 10
    440        gro.MoveNext
    450    Loop
    460    gro.Close
    470    Set gro = Nothing

    480    Sesion.FindById("wnd[0]/tbar[0]/okcd").Text = "/n"
    490    Sesion.FindById("wnd[0]").SendVKey 0


    End Sub
    RneoX
    RneoX
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 246
    Registrado : 26/07/2011

    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  RneoX 6/8/2013, 18:14

    vou ficar devendo, não manjo nadinha em vbscript,
    Eu entendi que você se refere alguns campos do formulário para preencher a tabela, assim que preenche salva na recordset e chama o próximo loop, mas fica muito confuso para eu entender em vbscript...

    Mas vou tentar dar uma dica,
    Quando você se refere a um grupo, faça uma variável salvar o número do grupo, exemplo Y = 1, e então usar o Loop

    Dim strSQL As String
    strSQL = "SELECT agrupador,itemagrupador,datadoc, datalcto, referencia, chave,chave2, contaforn, valor, localnegocios, docCriado,jaexistedoc,tipodoc, textocab, textocompe, blp, atrib, textoitem, fatrelacionada, anofatrel, itemfatrel FROM TabelaInput1"

      Set gro = CurrentDb.OpenRecordset(strSQL)

    Do While Not gro.EOF
    Select Case grp!grupo
    Case 1
    Aqui o código do grupo 1
    Case 2
    Aqui o código do grupo 2
    Case Else
    Não é nenhum dos dois grupos...
    End Select

    Caso não tem nada haver com o que você queira, tem esse outro


    Dim strSQL As String
    strSQL = "SELECT agrupador,itemagrupador,datadoc, datalcto, referencia, chave,chave2, contaforn, valor, localnegocios, docCriado,jaexistedoc,tipodoc, textocab, textocompe, blp, atrib, textoitem, fatrelacionada, anofatrel, itemfatrel FROM TabelaInput1"

      Set gro = CurrentDb.OpenRecordset(strSQL)

    Dim GrpX as Integer

    GrpX = gro!agrupador

    Do While Not gro.EOF

    If grpX = gro!Agrupador then

    Código aqui

    Else ' se não for igual quer dizer que é o grupo novo. então vamos setar o novo grupo

    GrpX = gro!agrupador

    Goto NextLoop

    End if

    NextLoop:

    Aqui você começa o novo Loop daquele grupo.

    Só coloquei algumas ideias, não é um código completo, esta meio corrido aqui, pois estou em auditoria do pessoal do Inmetro, Bom se você não entendeu muito, posso explicar um pouco, mas pode nem ser o que você deseja... :/


    .................................................................................
    Conhece meus projetos que ajudam os usuários a entender o funcionamento de várias funções encontradas aqui no fórum? também pode usa-lo para seus negócios ou para uso pessoal, não conhece? então visite aqui e veja como está bacana: Projeto Casco do Máximo Access v3.0 (Pré-Release 4.0) 
    Ser livre é ter liberdade para expressar suas idéias,
    Ser diferente é ser especial e o reverso da igualdade,
    Ser criativo é ser poderoso,
    Ter conhecimentos e não dividir-los é ser egoísta e orgulhoso,
    Ensinar é um prazer que todos devem ter por seus alunos, pois é dele que vem nossos troféus.

    Conteúdo patrocinado


    Loop com "do until" - utilizando agrupador para mais de uma linha na tabela Empty Re: Loop com "do until" - utilizando agrupador para mais de uma linha na tabela

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 2/5/2024, 04:25