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

    Gerar ordem numerica de acordo com outro campo (loop???)

    avatar
    efgomes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 15/12/2011

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  efgomes 9/5/2017, 17:55

    Grandes Mestres! estou precisando muito de vocês para resolver um problema no trabalho.

    Eu tenho uma tabela que possui dois campos. Um é o campo "unico" e o outro é "ordem". No campo unico possuo milhares de registros que pode se repetir, porem, eu preciso definir uma sequencia de ordem para esses registros de acordo com cada campo unico. Exemplo: Se tenho 10 registros com um unico igual, meu campo ordem para esses registros será 001 repetido 10 vezes. O problema é que posso o campo unico pode repetir-se milhares de vezes, mas, o campo ordem não pode ultrapassar 20 repetições. Então, toda vez que o campo ordem atingir 20 registros, mesmo o campo unico sendo igual, a ordem deve se reiniciar de onde parou.

    Não sei se consegui explicar direito, por isso fiz uma tabela com informações complementares que pode ser vista e baixada no link abaixo;

    https://drive.google.com/open?id=0B_oVG0zMQGiHVVNNeWlQN0RYWU0


    Por favor, me ajudem! Ficarei imensamente agradecido.

    Abraços!
    wellingtoneo
    wellingtoneo
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 294
    Registrado : 30/07/2012

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  wellingtoneo 9/5/2017, 20:41

    Olá amigo, como você gerou os primeiros números? foram inseridos um a um?
    Essa sequência sempre vai ser atualizadas? tipo quando você inserir novos dados, executa um boot e ordena tudo novamente... É isso?
    Vlw,
    avatar
    efgomes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 15/12/2011

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  efgomes 9/5/2017, 22:53

    Olá Welington,

    Esses números do campo "ordem" foram inseridos manualmente. Eu preciso fazer isso de forma automatica.
    Sim, é isso mesmo a sequencia vai ser sempre atualizada.
    wellingtoneo
    wellingtoneo
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 294
    Registrado : 30/07/2012

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  wellingtoneo 10/5/2017, 03:37

    Ok, tente algo do tipo:

    Em um modulo copie e cole o código a baixo.

    Código:

    Public Sub AtualizarOrdem()
    Dim rst As DAO.Recordset
    Dim varUnico As Double
    Dim varContador As Integer
    Dim j As Integer

    Set rst = CurrentDb.OpenRecordset("SuaTabela")

    If rst.RecordCount = 0 Then Exit Sub

    j = 1: varContador = 1

    rst.MoveFirst

    rst.Edit
    rst!Ordem = "00" & j
    rst.Update
    varUnico = rst!Unico
    rst.MoveNext

    Do While Not rst.EOF

    If varUnico = rst!Unico And varContador = 20 Then
     j = j + 1
     varContador = 0
    ElseIf varUnico <> rst!Unico Then
    varUnico = rst!Unico: j = j + 1
    varContador = 0
    End If

    rst.Edit
    rst!Ordem = "00" & j
    rst.Update
    varContador = varContador + 1
    rst.MoveNext
    Loop

    rst.Close

    MsgBox "Dados atualizados!", vbInformation, "Atualização"

    End Sub
    avatar
    efgomes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 15/12/2011

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  efgomes 10/5/2017, 14:44

    Grande Wellington!

    Está quase perfeito. O único problema é que: quando a ordem atinge o numero 10, a partir daí fica com quatro caracteres. Exemplo: ...007,008,009.0010,0011...

    Cara, eu até tentei fazer essa correção aqui, mas, estou tão apertado no trabalho que não estou conseguindo raciocinar direito. Se você puder me ajudar a corrigir isso eu vou ficar muito grato.

    De qualquer forma já ajudou bastante!

    Muito obrigado!

    Abraços.
    wellingtoneo
    wellingtoneo
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 294
    Registrado : 30/07/2012

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  wellingtoneo 10/5/2017, 15:23

    Acredito que o código a baixo resolva o problema... Dúvidas pode perguntar. Abs!

    Código:
    Public Sub AtualizarOrdem()
    Dim rst As DAO.Recordset
    Dim varUnico As Double
    Dim varContador As Integer
    Dim j As Integer, i as string

    Set rst = CurrentDb.OpenRecordset("SuaTabela")

    If rst.RecordCount = 0 Then Exit Sub

    j = 1: varContador = 1

    rst.MoveFirst

    rst.Edit
    rst!Ordem = "00" & j
    rst.Update
    varUnico = rst!Unico
    rst.MoveNext

    Do While Not rst.EOF

    If varUnico = rst!Unico And varContador = 20 Then
     j = j + 1
     varContador = 0
    ElseIf varUnico <> rst!Unico Then
    varUnico = rst!Unico: j = j + 1
    varContador = 0
    End If

    select case j
    case <= 9
    i = "00" & j
    case <= 99
    i = "0" & j
    case else
    i = j
    End select

    rst.Edit
    rst!Ordem = i
    rst.Update
    varContador = varContador + 1
    rst.MoveNext
    Loop

    rst.Close

    MsgBox "Dados atualizados!", vbInformation, "Atualização"

    End Sub
    avatar
    misaelsp
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 20/02/2013

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  misaelsp 10/5/2017, 16:15

    Boa tarde!

    Criei um BD teste
    No meu código, ele conta os registros iguais e agrupa. De modo que ele alterna a sequencia de ordem de 20 em 20 registros, mas quando muda o unico ele zera a ordem. Foi isso que eu tinha entendido com sua explicação.

    Se não foi isso que você queria, de qualquer forma fica ai como uma forma de estudo.
    Very Happy Very Happy Very Happy
    Anexos
    Gerar ordem numerica de acordo com outro campo (loop???) AttachmentDatabase2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (268 Kb) Baixado 18 vez(es)


    .................................................................................
    É fazendo que se aprende a fazer aquilo que se deve aprender a fazer Very Happy
    avatar
    efgomes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 15/12/2011

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  efgomes 11/5/2017, 15:05

    Caros colegas, vocês são feras demais. Com a ajuda de vocês dois (Wellington/Misael) eu consegui fazer o que queria. Mas, como nem tudo são flores, a coisa teve andamento e preciso atualizar outro campo nessa mesma tabela...

    Vejam só: Agora eu tenho minha tabela arrumadinha com meu campo ordem que a sequencia se altera de 20 em 20 registros. Até aqui tá ótimo. Só que agora, meu chefe Mad  me pediu para atualizar um outro campo, que seria sequencia da seguinte forma: Esse campo teria a sequencia de 1 a 20 e toda vez que atingir o 20 ele começaria do 01 de novo. Sacaram que é para numerar as 20 ordens?

    vejam o exemplo:

    Ordem            seq
    001                01
    001                02
    ....                 ...
    001                15
    001                16
    001                17
    001                18
    001                19
    001                20
    002                01
    002                    02
    002                    03
    ....           ...
    002                    19
    002                    20


    Meus mestres, me ajudem aí, por favor!
    wellingtoneo
    wellingtoneo
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 294
    Registrado : 30/07/2012

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  wellingtoneo 12/5/2017, 15:35

    Olá, tente o código a baixo:

    Código:
    Public Sub AtualizarOrdem()
    Dim rst As DAO.Recordset
    Dim varUnico As Double
    Dim varContador As Integer
    Dim varSeq As Integer
    Dim j As Integer, i as string

    Set rst = CurrentDb.OpenRecordset("SuaTabela")

    If rst.RecordCount = 0 Then Exit Sub

    j = 1: varContador = 1: varSeq = 1

    rst.MoveFirst

    rst.Edit
    rst!Ordem = "00" & j
    rst!seq = varSeq
    rst.Update
    varUnico = rst!Unico
    rst.MoveNext

    Do While Not rst.EOF

    If varUnico = rst!Unico And varContador = 20 Then
     j = j + 1
     varContador = 0
    ElseIf varUnico <> rst!Unico Then
    varUnico = rst!Unico: j = j + 1
    varContador = 0
    End If

    select case j
    case <= 9
    i = "00" & j
    case <= 99
    i = "0" & j
    case else
    i = j
    End select

    rst.Edit
    rst!Ordem = i
    if varContador = 19 then
    varSeq = 1
    else
    varSeq = varSeq + 1
    End if
    rst!seq = varSeq 
    rst.Update
    varContador = varContador + 1
    rst.MoveNext
    Loop

    rst.Close

    MsgBox "Dados atualizados!", vbInformation, "Atualização"

    End Sub
    avatar
    efgomes
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 15/12/2011

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  efgomes 15/5/2017, 18:06

    Caro colega, eu usei o código, porem alterei um pouquinho para dar quase certo. Não sei porque, alguns números no campo "seq" repetem.

    Veja na imagem:

    Gerar ordem numerica de acordo com outro campo (loop???) Unico10

    Outra coisa que seria ótimo, se a "seq" inferior a 10, ficasse em duas casas...01,02,03...

    Agradeço imensamente a ajuda. Tem sido ótima.

    Estou postando o código, como usei.

    Código:
    Public Sub AtualizarSeq2()
    Dim rst As DAO.Recordset
    Dim varUnico As Double
    Dim varContador As Integer
    Dim varSeq As Integer
    Dim j As Integer, i As String

    Set rst = CurrentDb.OpenRecordset("individualizados")

    If rst.RecordCount = 0 Then Exit Sub

    j = 1: varContador = 1: varSeq = 1

    rst.MoveFirst

    rst.Edit
    rst!Ordem = "00" & j
    rst!seq = varSeq
    rst.Update
    varUnico = rst!unico
    rst.MoveNext

    Do While Not rst.EOF

    If varUnico = rst!unico And varContador = 19 Then
     j = j + 1
     varContador = 0
    ElseIf varUnico <> rst!unico Then
    varUnico = rst!unico: j = j + 1
    varContador = 0
    End If

    Select Case j
    Case Is <= 9
    i = "00" & j
    Case Is <= 99
    i = "0" & j
    Case Else
    i = j
    End Select



    rst.Edit
    rst!Ordem = i
    If varContador = 1 Then
    varSeq = 1
    Else
    varSeq = varSeq + 1
    End If
    rst!seq = varSeq
    rst.Update
    varContador = varContador + 1
    rst.MoveNext
    Loop

    rst.Close

    MsgBox "Dados atualizados!", vbInformation, "Atualização"

    End Sub
    avatar
    misaelsp
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 97
    Registrado : 20/02/2013

    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  misaelsp 16/5/2017, 15:55

    o código para enumeração do campo sequencia vai ser o mesmo para enumeração do campo ordem, a diferença é que ao invés de tratar o campo unico, você irá tratar o campo ordem. sacou?

    e pra acrescentar os zeros é so fazer um if verificando se é menor que 10. se for acrescenta:
    varTeste = "00" & varTeste

    é simples. Espero ter ajudado.


    .................................................................................
    É fazendo que se aprende a fazer aquilo que se deve aprender a fazer Very Happy

    Conteúdo patrocinado


    Gerar ordem numerica de acordo com outro campo (loop???) Empty Re: Gerar ordem numerica de acordo com outro campo (loop???)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 06:47