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


2 participantes

    [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 31/10/2012, 22:17

    galera, fiz uma pesquisa no forum e achei esse topico:


    http://maximoaccess.forumeiros.com/t9345-resolvidoverificar-duplicidade-utilizando-como-criterio-varios-campos

    nele, peguei esse codigo, inclui o undo e deixei no after update

    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM table1")

    Do While Not rst.EOF
    If rst![Processos] = Me.Texto136.Value And rst![VOL] = Me.Text214.Value Then
    MsgBox "Registro já lançado...", vbCritical
    Exit Do
    me.undo
    Else
    DoCmd.RunMacro "salvarreg"
    End If
    rst.MoveNext
    Loop
    rst.Close
    End Sub

    testei e funcionou, o problema e o seguinte. apos inserir o registro, eu eventualmente volto nele e altero algumas coisas, sendo assim, precisava q o codigo so funcionasse em novas entradas, se o registro ja existe, ele nao rodasse. outra coisa, eu ja tinha no after update um codigo perguntando se o usuario deseja realmente salvar as alteracoes. tem inclui-lo mas nao consegui ... alguem pode dar um help?
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 31/10/2012, 22:26

    Se no form você tem o campo Código do Registro, podes utilizar o Dcount para isto, assim se na contagem retornar >=1 Encerra a sub.


    Cumprimentos.
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 31/10/2012, 22:45

    fala piloto, como uso o dcount ? tentei adaptar o codigo do alexandre do link q postei q tem um dcount mas nao consegui. pode me como ficaria ? e tb, como adicionaria a confirmacao das alteracoes apos atualizar?

    abs
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 31/10/2012, 23:00

    If DCount("*","SuaTabela","SeuCampoCodigoNaTabela ='" & Me.SeuCampoNoForm & "'") >= 1 Then

    Codigo a ser executado

    Else

    Codigo a ser executado

    End If
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 10:54

    Piloto, tentei aqui mas nao está indo. Pode dar uma olhada ?

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If DCount("*", "table1", "Id ='" & Me.Text224 & "'") >= 1 Then
    MsgBox "Registo Atualizado com Sucesso."
    Me.Refresh
    Else
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM table1")

    Do While Not rst.EOF
    If rst![Processos] = Me.Texto136.Value And rst![VOL] = Me.Text214.Value Then
    MsgBox "Registro já lançado...", vbCritical
    Exit Do
    Me.Undo
    Else
    DoCmd.Save
    End If
    rst.MoveNext
    Loop
    rst.Close
    End If
    End Sub
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 1/11/2012, 11:54

    Não deu certo... Mas o que não deu certo? que erro aconteceu?


    Cumprimentos.
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 12:09

    Desculpa Piloto, ficou muito vago mesmo. Apareceu uma msg dizendo data type mismatch in criteria expression. Disponibilizei o Bd para se puder dar uma olhada.

    Abs
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 1/11/2012, 13:21

    Qual o form e qual o campo onde está o código?


    Cumprimentos.
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 13:37

    Fala Piloto. O codigo está no Form FRMAdministrador. Deixei para teste 2 campos de referencia para a variavel funcionar, "cx" (caixa de texto "texto133" no form) e "Ife" (caixa de texto "text214" no form) da table1. Usei tb um terceiro campo no idcount como vc tinha comentado ( "id" da table1, caixa de texto text224 no form), para que nas situaçoes onde ja existe um processo cadastrado, ele aceite que eu faça modificaçoes. A variavel so vai funcionar para novos registros, e nao para os que ja existem. Senao eu nao conseguiria alterar um registro que ja foi feito.
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Cláudio Más 1/11/2012, 14:05

    Uma idéia é usar o código original no evento Before Insert, substituindo Me.Undo por Cancel = True
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 14:21

    Fala Claudio, mas como seria ? Pq antes de inserir as "linhas", o access nao teria referencia para saber se o registro ja existe.
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Cláudio Más 1/11/2012, 14:37

    O loop pelo recordset não tem essa finalidade, verificar se o registro existe usando como referência Me.Texto136 e Me.Text214?

    Do While Not rst.EOF
    If rst![Processos] = Me.Texto136.Value And rst![VOL] = Me.Text214.Value Then


    ...

    Não é necessário o novo registro estar salvo.
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 14:44

    Sim, mas so quero q ele o faça com os novos registros, nao com os ja existentes. Exemplo:
    Caso ja tenha um registro feito, e desejar voltar nele para alterar alguma coisa, nao quero q seja feito nada, só confirme q eu desejo salvar. Senao, ele vai achar q estou querendo novamente inserir esse registro baseado nas duas combinaçoes.

    Após eu inserir um novo registro e preencher todos os campo, na hora de atualizar, quero q nesse momento faça o loop para checar se aquelas 2 combinaçoes de dados q determinei ja existem. Se ja existirem ele da o undo e cancela essa linha inserida. Sou bem cru ainda claudio, desculpe se nao estiver sendo muito tecnico.

    Abs
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 1/11/2012, 15:02

    Podes utilizar apenas o Dcount com os dois critérios para isto... não é necessário a utilização do recordset.


    Mas bem mesmo assim eis o código corrigido, o codigo é numero portanto entre aspas duplas apenas:




    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If DCount("*", "table1", "Id =" & Me.Text224 & "") >= 1 Then
    MsgBox "Registo Atualizado com Sucesso."
    Me.Refresh
    Else
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM table1")

    Do While Not rst.EOF
    If rst![Cx] = Me.Texto133.Value And rst![VOL] = Me.Text214.Value Then
    MsgBox "Registro já lançado...", vbCritical
    Exit Do
    Me.Undo
    Else
    DoCmd.Save
    End If
    rst.MoveNext
    Loop
    rst.Close
    End If
    End Sub



    Cumprimentos
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 16:05

    Valeu Piloto !!! Mudei so um detalhe da posiçao do undo e tirei o refresh q tava dando erro, e ficou perfeito !! Veja oq acha.

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If DCount("*", "table1", "Id =" & Me.Text224 & "") >= 1 Then
    MsgBox "Registo Atualizado com Sucesso."
    'vai salvar
    Else
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM table1")

    Do While Not rst.EOF
    If rst![Cx] = Me.Texto133.Value And rst![VOL] = Me.Text214.Value Then
    MsgBox "Registro já lançado...", vbCritical
    Me.Undo
    Exit Do
    Else
    DoCmd.Save
    End If
    rst.MoveNext
    Loop
    rst.Close
    End If
    End Sub
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Cláudio Más 1/11/2012, 16:13

    Sim, mas so quero q ele o faça com os novos registros, nao com os ja existentes

    É pra isso que serve o Before Insert, esse evento só é disparado por novos registros, dispensando o uso de DCount().

    Mas se está resolvido, resolvido está. Smile

    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 1/11/2012, 16:19

    Boa observação Claudio...

    Mas como disse... se está resolvido... resolvido está.


    Abraços.

    So faltou o resolvido no tópico amigão.


    Cumprimentos.
    avatar
    gustavovon
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 67
    Registrado : 07/10/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  gustavovon 1/11/2012, 16:33

    Claudio, o problema é q minhas caixas de texto geram o registro antes do update. Sendo assim, se eu colocasse before insert, nao funcionaria (nao sei se estou fazendo confusao) ja que os campos necessarios para serem feitas as checagens nao estariam preenchidos. De qualquer forma, obrigado pela ajuda

    Piloto, estava apenas aguardando vc se pronunciar para agradecer novamente.

    Abs
    avatar
    Convidado
    Convidado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Convidado 1/11/2012, 16:36

    O Fórum agradece o retorno.
    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Cláudio Más 1/11/2012, 16:56

    Tem razão Gustavo, talvez fosse melhor o After Insert.
    Abs

    Conteúdo patrocinado


    [Resolvido]Evitar duplicacao de registros  apenas em novas entradas Empty Re: [Resolvido]Evitar duplicacao de registros apenas em novas entradas

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 15:21