MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

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

    Compartilhe

    efgomes
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  efgomes em Ter 09 Maio 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;

    [Você precisa estar registrado e conectado para ver este link.]


    Por favor, me ajudem! Ficarei imensamente agradecido.

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

    Respeito às Regras 100%

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

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

    Mensagem  wellingtoneo em Ter 09 Maio 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,

    efgomes
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  efgomes em Ter 09 Maio 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.
    avatar
    wellingtoneo
    Avançado
    Avançado

    Respeito às Regras 100%

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

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

    Mensagem  wellingtoneo em Qua 10 Maio 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

    efgomes
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  efgomes em Qua 10 Maio 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.
    avatar
    wellingtoneo
    Avançado
    Avançado

    Respeito às Regras 100%

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

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

    Mensagem  wellingtoneo em Qua 10 Maio 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

    misaelsp
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  misaelsp em Qua 10 Maio 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
    Database2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (268 Kb) Baixado 7 vez(es)


    .................................................................................
    É fazendo que se aprende a fazer aquilo que se deve aprender a fazer [Você precisa estar registrado e conectado para ver esta imagem.]

    efgomes
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  efgomes em Qui 11 Maio 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!
    avatar
    wellingtoneo
    Avançado
    Avançado

    Respeito às Regras 100%

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

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

    Mensagem  wellingtoneo em Sex 12 Maio 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

    efgomes
    Novato
    Novato

    Respeito às Regras 100%

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

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

    Mensagem  efgomes em Seg 15 Maio 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:

    [Você precisa estar registrado e conectado para ver este link.]

    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

    misaelsp
    Intermediário
    Intermediário

    Respeito às Regras 100%

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

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

    Mensagem  misaelsp em Ter 16 Maio 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 [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: Sab 18 Nov 2017, 01:06