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

    comparar registro anterio com o atual

    Compartilhe

    alexjc
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 19
    Registrado : 23/02/2016

    comparar registro anterio com o atual

    Mensagem  alexjc em Qua 24 Maio 2017, 13:38

    exemplo ao clicar em um botão ele faz um loop em um arquivo tipo

    antes
    |1|0200|42654|BUCHA BAND DT P DT|||UN|00|40169990||40||||
    |2|0200|43100|BUCHA BAND DT P DT|||PC|00|40169990||40||||
    |3|0200|33382|BUCHA BAND DT P DT|||UN|00|40169990||40||||
    |4|0200|34958|BUCHA BAND DT P DT|||UN|00|40169990||40||||
    |5|0200|35455|BUCHA BAND DT P DT|||UN|00|40169990||40||||
    |5|0200|38033|BUCHA BAND DT P/DT|||UN|00|40169990||40||||

    eu quero uma logica que ao reconhecer que existe campos com dados igual na caso o campo4, ela logo atualizava assim

    depois
    |1|0200|42654|BUCHA BAND DT P DT A|||UN|00|40169990||40||||
    |2|0200|43100|BUCHA BAND DT P DT B|||PC|00|40169990||40||||
    |3|0200|33382|BUCHA BAND DT P DT C|||UN|00|40169990||40||||
    |4|0200|34958|BUCHA BAND DT P DT D|||UN|00|40169990||40||||
    |5|0200|35455|BUCHA BAND DT P DT E|||UN|00|40169990||40||||
    |5|0200|38033|BUCHA BAND DT P/DT F|||UN|00|40169990||40||||

    note que no campo4 seria adicionado o A, B, C, D, E, F


    eu tinha tentado assim

    Private Sub Comando59_Click()
    DoCmd.Requery

    Dim i As Integer
    For i = 1 To Me.Lista57

    essa seria minha logica
    if me.campo4 = me.campo4 do registro anterior then
    me.campo4 = me.campo4 + a



    End If
    DoCmd.GoToRecord , , acNext
    Next

    End Sub
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 292
    Registrado : 01/08/2011

    Re: comparar registro anterio com o atual

    Mensagem  ronaldojr1 em Qua 31 Maio 2017, 15:37

    bom dia,
    o que vc quer parece facil, mas é um pouquinho complicado de falar para o access como ele vai fazer
    pra resolver seu problema de uma maneira que ocupe menos tempo e processamento possivel.
    fiz um codigo em uma tabela de teste e funcionou perfeitamente, não sei como esta sua estrutura, mas creio
    que nao sera dificil para vc adaptar.

    segue codigo:
    Código:
    Sub updateCampo4()
    'funcao responsavel por atualizar o campo 4 quando o mesmo for repetido
    'incrementar letra do alfabeto no final do texto
    'BUCHA BAND DT P DT A
    'BUCHA BAND DT P DT B

    'Metodo de funcionamento
    '1 - cria um recordset contendo apenas os produtos que repetem mais de 1 vez
    '2 - no loop sera aberto outro recordset filtrando o valor que foi achado no recordset do passo 1.
    '     assim sera possivel capturar a chave primaria dos registros envolvidos
    '3 - atualiza o campo criando uma consulta dinamica

    'observação, nao fiz tratamento caso um produto chegue ate a letra Z

    Dim rs As Recordset
    Dim rsUpdate As Recordset
    Dim sql As String
    Dim codeAsc As Integer 'Letra A = 65 e Z = 90
    Dim contador As Integer ' faz a contagem de quantas atualizações foram feitas
    contador = 0

    sql = "SELECT Tabela_Origem.campo4, Count(Tabela_Origem.campo4) AS cont " & _
          "FROM Tabela_Origem " & _
          "GROUP BY Tabela_Origem.campo4 " & _
          "HAVING (((Count(Tabela_Origem.campo4)) > 1)) " & _
          "ORDER BY Tabela_Origem.campo4"

    Set rs = CurrentDb().OpenRecordset(sql)
    'verifica se possui registro
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        'faz o loop para percorrer todos os registros da tabela de origem
        Do While Not rs.EOF
            'abre recordset filtrando apenas os produtos que esta no recordset
            'esse passo é necessario para podermos pegar o campoDaChavePrimaria, assim
            'vamos atualizar o registro exato
            sql = "SELECT Tabela_Origem.cdCampo FROM Tabela_Origem where campo4 = '" & rs!campo4 & "'" 'cdCampo e o nome da minha chave primaria
            Set rsUpdate = CurrentDb().OpenRecordset(sql)
            codeAsc = 65
            rsUpdate.MoveFirst
            
            'percorre pelos registro para fazer o update dinamico
            Do While Not rsUpdate.EOF
                DoCmd.RunSQL "UPDATE Tabela_Origem set campo4 ='" & rs!campo4 & " " & Chr(codeAsc) & "' where cdCampo = " & rsUpdate!cdCampo
                codeAsc = codeAsc + 1 'incrementa alfabeto
                contador = contador + 1 'incrementa contador
                rsUpdate.MoveNext
            Loop
            rs.MoveNext
        Loop
        MsgBox "Foram Atualizados: " & contador, vbInformation, "Teste Incremento Alfabeto"
    Else
        MsgBox "Tabela nao possui dados para ser verificado", vbCritical
    End If
    Set rs = Nothing
    Set rsUpdate = Nothing
    End Sub

    boa sorte ai fera

    alexjc
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 19
    Registrado : 23/02/2016

    Re: comparar registro anterio com o atual

    Mensagem  alexjc em Dom 04 Jun 2017, 01:58

    valeu ai cara pela ajuda, mas inda estou dando os primeiros passos e seu exemplo é complicado demais para min.
    avatar
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 292
    Registrado : 01/08/2011

    Re: comparar registro anterio com o atual

    Mensagem  ronaldojr1 em Seg 05 Jun 2017, 13:17

    fiz de outro jeito,
    ve se desse jeito vc acha mais facil,
    se ainda nao conseguir fala ai onde vc nao esta conseguindo adaptar para ver se
    consigo te ajudar
    Código:
    Private Sub updateCampo4_2()

    Dim rs As Recordset
    Dim codeAsc As Integer
    Dim produtoAnterior As String
    Dim cont As Integer

    codeAsc = 65
    cont = 0

    Set rs = CurrentDb.OpenRecordset("Select campo4 from Tabela_Origem order by campo4") 'ordena em ordem alfabetica o campo4

    If rs.RecordCount > 0 Then 'so executa a verificação se a consulta existir registros
    rs.MoveFirst
    'le a consulta
        produtoAnterior = ""
        Do While Not rs.EOF
            'verifica se o produto atual e igual ao anterior
            'MsgBox produtoAnterior & " -- " & rs!campo4
            If produtoAnterior = rs!campo4 Then
                'se cont = 0 significa que o produto encontrado sera o B, entao entao que voltar ao produto anterior para trocar para A
                If cont = 0 Then
                    rs.MovePrevious 'volta 1 registro
                    rs.Edit
                    rs!campo4 = rs!campo4 & " " & Chr(codeAsc)
                    rs.Update
                   
                    codeAsc = codeAsc + 1
                   
                    rs.MoveNext 'volta para o registro
                    rs.Edit
                    rs!campo4 = rs!campo4 & " " & Chr(codeAsc)
                    rs.Update
                    codeAsc = codeAsc + 1
                   
                    cont = cont + 1
                Else
                    rs.Edit
                    rs!campo4 = rs!campo4 & " " & Chr(codeAsc)
                    rs.Update
                    codeAsc = codeAsc + 1
                End If
            Else 'zera contadores e atualiza produtoAnterior
                codeAsc = 65
                cont = 0
                produtoAnterior = rs!campo4
            End If
         
            rs.MoveNext
        Loop
    End If

    Set rs = Nothing
    End Sub

      Data/hora atual: Ter 21 Nov 2017, 10:16