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


    Mensagem para duplicação de nomes

    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Mensagem para duplicação de nomes

    Mensagem  julianovv 29/5/2012, 18:26

    Boa tarde. Procurei e encontrei uma solução aqui no fórum para uma lista de nomes que ao lançar um novo não poderia ter duplicação. O código funcionou sem problema. O caso é que tenho outro formulário que precisa desse código mas não quer funcionar agora.
    Ele é um cadastro de nomes e sobrenomes. (vide anexo) e como o outro, esse também não pode ter duplicação.
    Usei o seguinte código:

    Mensagem para duplicação de nomes Moz-screenshotPrivate Sub NomeCompleto_AfterUpdate()
    Dim Busca As String
    Dim stLinkCriteria As String
    Dim rsc As DAO.Recordset
    Set rsc = Me.RecordsetClone
    Busca = Me.NomeCompleto.Value
    stLinkCriteria = "NomeCompleto= '" & Busca & "'"
    If DCount("NomeCompleto", "Cst_Projetistas_sp", stLinkCriteria) > 0 Then
    Me.Undo
    MsgBox "Atenção " _
    & Busca & " já existe." _

    End If
    Set rsc = Nothing

    End Sub


    Onde "NomeCompleto" é um campo concatenado que une os campos Nome e Sobrenome em uma caixa de texto.
    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 29/5/2012, 20:18


    Olá
    Pode usar a DLookup para verificar:


    Private Sub txtNome_BeforeUpdate(Cancel As Integer)
    On Error GoTo Trato

    If Me.txtNome = Me.txtNome.OldValue Then Exit Sub

    If IsNull(Me.txtNome) Then
    Cancel = True
    Me.txtNome.Undo
    MsgBox "Não é possível deletar o nome, apenas substituir."
    Else
    If Not IsNull(DLookup("[txtNome]", "[Tabela]", "[txtNome] ='" & Me!txtNome & "'")) Then
    Cancel = True
    Me.txtNome.Undo
    MsgBox "Nome já cadastrado."
    End If
    End If

    Exit Sub
    Trato: MsgBox Err.Description
    End Sub

    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  julianovv 29/5/2012, 21:30

    Obrigado. Esse código ele faz exatamente o que?
    Posso usar a caixa de texto concatenando Nome e Sobrenome?

    Wink
    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 29/5/2012, 21:57


    O código faz o seguinte: (numerando as linhas a partir de 1)

    1 - Declara o procedimento. No caso, o evento ocorre antes da atualização do campo txtNome, ou seja, após um valor ser inserido mas antes de ser aceito. O parâmetro Cancel pode ser usado para cancelar o evento.
    2 - Diz ao procedimento o que deve ser feito se ocorrer um erro. No caso, diz: vá para a parte onde está o termo Trato
    3 - Se o valor inserido no campo é igual ao que já havia antes, sai do procedimento. Ou seja, o evento não continua. Se for diferente do anterior, continua.
    4 - Se o campo estiver em branco...
    5 - Cancela o evento.
    6 - Desfaz a entrada, voltando ao valor anterior.
    7 - Exibe uma mensagem.
    8 - Se não estiver em branco...
    9 - Se a verificação de um nome igual na tabela não der Nulo...
    10 - Cancela o evento.
    11 - Desfaz a entrada, voltando ao valor anterior.
    12 - Exibe uma mensagem.
    13 - Fecha o se... (If)
    14 - Fecha o se... (If)
    15 - Sai do procedimento
    16 - Em caso de erro exibe uma mensagem com a descrição do erro
    17 - Finaliza o procedimento

    No caso de campo concatenado, a DLookup terá de fazer uma verificação combinada dos 2 campos.

    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  julianovv 30/5/2012, 21:10

    Obrigado pelo detalhamento. Foi bem claro.
    Esse cadastro tem um complicador quando o usuário digitar o primeiro nome. Em seu código ele cancela o procedimento se o nome já existir. Aí que entra o pepino. O primeiro nome sempre tem repetição mas o sobrenome já não tem quando não é da mesma família. Se eu digitar "Paulo", ele nunca vai deixar prosseguir porque já existe uma centena de Paulos na lista (Paulo Pereira, Paulo Santos, Paulo Silva...). Já o sobrenome, se for uma família cadastrada (Maria Silva, Paulo Silva, Marcia Silva) ele também não deixará prosseguir.
    Por isso eu perguntei sobre o campo concatenado. O código faria a leitura apenas desse campo. Se existir idêntico ele cancela o evento. Imagino que o código estaria nesse campo em "após atualizar".

    Rolling Eyes
    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  julianovv 30/5/2012, 21:21

    E ainda tem mais uma encrenca. O usuário quando vai cadastrar um novo nome nem sempre procura na lista se já existe. Ele redigita de maneira que nem sempre fica identico ao anterior.
    Ex: Samuel de Moraes Lima e Samuel Morais de Lima Leão
    Como vê é o mesmo cara, mas escrito de forma errada.

    Rolling Eyes
    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 30/5/2012, 22:03


    O código é um exemplo.

    Como mencionei, para o caso de campos concatenados, a função DLookup terá de combinar os campos nome e sobrenome, e verificar se existe uma combinação idêntica na tabela.

    Seria algo assim para o evento AntesDeAtualizar do campo sobrenome, e deve colocar código semelhante no ApósAtualizar do campo nome - para o caso de alteração após já existir um sobrenome:

    Código:

    Private Sub txtSobrenome_BeforeUpdate(Cancel As Integer)
    On Error GoTo Trato

    If Me.txtSobrenome = Me.txtSobrenome.OldValue Then Exit Sub

    If IsNull(Me.txtSobrenome) Then
        Cancel = True
        Me.txtSobrenome.Undo
        MsgBox "Não é possível deletar o nome, apenas substituir."
    Else
        If Not IsNull(Me.txtNome) Then
          If Not IsNull(Dlookup("[txtNome] & [txtSobrenome], "NomeDatabela", "[txtNome] & [txtSobrenome] ='" & Me!txtNome & Me!txtSobrenome & "'")) Then
              Cancel = True
              Me.txtSobrenome.Undo
              MsgBox "Nome já cadastrado."
          End If
        Else
          Cancel = True
          Me.txtSobrenome.Undo
          Me.txtNome.SetFocus
          MsgBox "Preencha o primeiro Nome."
        End If
    End If

    Exit Sub
    Trato: MsgBox Err.Description
    End Sub
    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 30/5/2012, 22:09


    Bem, quanto ao problema do usuário, não há código no mundo que resolva todos os problemas que o desleixo cria.

    Pode-se prevenir muita coisa e corrigir outras tantas. Mas quando o usuário quer, ele consegue.

    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 31/5/2012, 03:06

    A única maneira de se evitar homônimos (nomes iguais) é usar um dado único do indivíduo.

    Porque por mais que se acerque de cuidados, a digitação está livre e tenha certeza que a qualquer hora, alguém vai cadastrar o Juliano como Juliana ou Julaino ou outra derivação qualquer do nome.

    Para isso temos o RG e o CPF.

    No repositório tem um exemplo de como cadastrar usando o CPF, que pode ser mudado para ser usado com RG.

    Abraços.


    Última edição por Balem em 31/5/2012, 14:52, editado 1 vez(es)
    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  julianovv 31/5/2012, 13:22

    Bom dia! O código deu um erro na linha marcada de vermelho. Erro de sintaxe.

    Rolling Eyes

    Private Sub txtNome_AfterUpdate()
    On Error GoTo Trato

    If Me.txtNome = Me.txtNome.OldValue Then Exit Sub

    If IsNull(Me.txtNome) Then
    Cancel = True
    Me.txtNome.Undo
    MsgBox "Não é possível deletar o nome, apenas substituir."
    Else
    If Not IsNull(Me.txtSobrenome) Then
    If Not IsNull(Dlookup("[txtNome] & [txtSobrenome], "Tbl_Projetistas", "[txtNome] & [txtSobrenome] ='" & Me!txtNome & Me!txtSobrenome & "'")) Then
    Cancel = True
    Me.txtNome.Undo
    MsgBox "Nome já cadastrado."
    End If
    Else
    Cancel = True
    Me.txtSobrenome.Undo
    Me.txtNome.SetFocus
    MsgBox "Preencha o primeiro Nome."
    End If
    End If

    Exit Sub
    Trato: MsgBox Err.Description

    End Sub
    avatar
    Convidad
    Convidado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Convidad 31/5/2012, 15:06


    Neste tópico tem links para aprender sobre sintaxe:

    http://maximoaccess.forumeiros.com/t3581-guia-pratico-para-sintaxe-e-expressoes-vba


    julianovv
    julianovv
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 685
    Registrado : 14/12/2010

    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  julianovv 11/6/2012, 19:26

    Tem como editar o código que postei acima para o número do CPF? Não encontrei outra solução para evitar a duplicação de nomes. O campo concatenado não quis funcionar nem a porrete!..rsrs

    Rolling Eyes

    Conteúdo patrocinado


    Mensagem para duplicação de nomes Empty Re: Mensagem para duplicação de nomes

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/11/2024, 14:26