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]não aceitar dados iguais, ignorando espaço e acentos

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 16:49

    Boa tarde a todos do forum! Amigos, eu pensei aqui em uma situação e queria saber se é possível. Eu tenho uma tabela e nela tem um campo para se colocar citações. O que eu gostaria era que a tabela não armazenasse informações iguais. Eu sei que podemos colocar a propriedade de indexado duplicação não autorizada, só que se alguém colocar uma citação e colocar um acento a mais ou deixar de acentuar alguma palavra ou dá um espaço a mais, a citação é gravada. Então gostaria de saber se tem como o access usar como parâmetros apenas a sequencia de caracteres, ignorando espaços e acentos.
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 26/2/2012, 17:40

    Você pode usar o Replace para retirar espaços e acentos:

    Replace(Replace(Replace(Me.NomeDoCampo), " ", ""), "á", "a"), "ó", "o")

    No caso acima, espaços serão retirados, "á" será trocado por "a" e "ó" será trocado por "o". Bastará adicionar as outras letras. Depois, é só usar a sequência para comparar utilizando o DCount.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 17:47

    Esse Replace eu uso no formulário??? e o texto armazenado na tabela vai ficar normal? com acentos e espaços?
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 26/2/2012, 18:56

    Seria algo assim, talvez utilizando um loop em um recordset para verificar a tabela:

    Código:
    Dim rs As Recordset, Status As Boolean
    Set rs = CurrentDb.OpenRecordset("NomeDaTabela")

    Do While Not rs.EOF

        If Replace(Replace(Replace(rs!NomeDoCampoDaTabela), " ", ""), "á", "a"), "ó", "o") = Replace(Replace(Replace(Me.NomeDoCampo), " ", ""), "á", "a"), "ó", "o") Then
            Status = True
        End If
        rs.MoveNext

    Loop

    If Status = True Then
        MsgBox "Registro duplicado"
    Else
    End If

    rs.Close
    Set rs = Nothing

    Só que tem um porem: pode ser que haja diferença entre palavras como por exemplo "x" no lugar de "ch" ou "li" trocado com "lh". Aí a função não funcionará. Talvez seja o caso de fazer tambem uma estimativa de similaridade, contando letra a letra na tabela e comparando letra a letra com o novo registro. Se der, por exemplo, 80% de similaridade, barra a gravação, apesar de que, em alguns casos, pode falhar tambem, pois veja as duas frases abaixo:

    A barata está tonta
    A batata está torta


    Ao comparar as duas frases, letra a letra, verá que mudaram apenas duas letras de uma para a outra.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 19:35

    Você acha melhor eu colocar esse código no campo do formulário no evento ao alterar? após atualizar? ou no formulário mesmo no evento no atual?
    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 19:54

    Críquio tá dando erro de sintaxe e compilação

    Private Sub Citação_AfterUpdate()Dim rs As Recordset, Status As Boolean
    Set rs = CurrentDb.OpenRecordset("Citaçao")

    Do While Not rs.EOF
    If Replace(Replace(Replace(rs!Citar), " ", ""), "á", "a"), "é", "e"), "ó", "o") = Replace(Replace(Replace(Me.Citação), " ", ""), "á", "a"), "ó", "o") Then
    Status = True
    End If
    rs.MoveNext
    Loop
    If Status = True Then
    MsgBox "Registro duplicado"
    Else
    End If
    rs.Close
    Set rs = Nothing
    End Sub
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 26/2/2012, 19:56

    A primeira linha está assim mesmo?

    Private Sub Citação_AfterUpdate()Dim rs As Recordset, Status As Boolean

    Se for, passe do Dim para frente para a linha de baixo:

    Private Sub Citação_AfterUpdate()
    Dim rs As Recordset, Status As Boolean


    Tambem está passando parênteses no Replace:

    If Replace(Replace(Replace(rs!NomeDoCampoDaTabela), " ", ""), "á", "a"), "ó", "o") = Replace(Replace(Replace(Me.NomeDoCampo), " ", ""), "á", "a"), "ó", "o") Then

    Retire os parênteses em vermelho.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 20:09

    Fiz o que falou, e apareceu o mesmo erro, mesmo tirando o parênteses ou deixando-o, aparece erro de sintaxe. Quando removi o parênteses e depois fui colocar novamente ele mostrou outra mensagem informando que era esperando THEN ou GO TO
    Private Sub Citação_AfterUpdate()
    Dim rs As Recordset, Status As Boolean

    Set rs = CurrentDb.OpenRecordset("Citaçao")

    Do While Not rs.EOF
    If Replace(Replace(Replace(rs!Citar), " ", ""), "á", "a"), "é", "e"), "ó", "o") = Replace(Replace(Replace(Me.Citação), " ", ""), "á", "a"), "ó", "o") Then
    Status = True
    End If
    rs.MoveNext
    Loop
    If Status = True Then
    MsgBox "Registro duplicado"
    Else
    End If
    rs.Close
    Set rs = Nothing
    End Sub
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 26/2/2012, 20:16

    Você não retirou os parênteses corretos e tambem tem apenas três replaces para mudar quatro situações. Tem que adicionar um Replace para cada letra a ser tirada o acento, um para o espaço e um para o cedilha.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 20:24

    Muito bem críquio era isso mesmo, ficou assim:

    Private Sub Citação_AfterUpdate()
    Dim rs As Recordset, Status As Boolean

    Set rs = CurrentDb.OpenRecordset("Citaçao")

    Do While Not rs.EOF
    If Replace(Replace(Replace(rs!Citar, "a", "á"), "o", "ó"), "", " ") = Replace(Replace(Replace(Me.Citação, "a", "á"), "o", "ó"), "", " ") Then
    Status = True
    End If
    rs.MoveNext
    Loop
    If Status = True Then
    MsgBox "Registro duplicado"
    Else
    End If
    rs.Close
    Set rs = Nothing
    End Sub


    No entanto ele apenas avisa que há registros duplicados, mas termina salvando assim mesmo, eu queri que quando ele detectasse a duplicação, não salvasse.

    Eu tentei colocar DoCmd.CancelEvent após If Status = True Then mas não deu certo
    avatar
    Convidad
    Convidado


    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  Convidad 26/2/2012, 21:00


    Tente o evento BeforeUpdate(Cancel As Integer)
    que pode ser interceptado com Cancel.

    ...
    If Status = True Then
    Cancel = True
    MsgBox "Registro duplicado"
    ...
    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 26/2/2012, 21:12

    Obrigado norbs e a você grande mestre críquio. Deu tudo certinho aqui
    avatar
    Convidad
    Convidado


    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  Convidad 27/2/2012, 11:39


    Bom dia!

    Ótimo que resolveu. Agradecemos o retorno.
    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 27/2/2012, 18:46

    Pessoal, principalmente o Norbs e o Críquio que me ajudaram, eu reabri o tópico porque ao testar a função abaixo
    Private Sub Citação_BeforeUpdate(Cancel As Integer)
    Dim rs As Recordset, Status As Boolean

    Set rs = CurrentDb.OpenRecordset("Citaçao")

    Do While Not rs.EOF
    If Replace(Replace(Replace(rs!Citar, "a", "á"), "o", "ó"), "", " ") = Replace(Replace(Replace(Me.Citação, "a", "á"), "o", "ó"), "", " ") Then
    Status = True
    End If
    rs.MoveNext
    Loop
    If Status = True Then
    Cancel = True
    MsgBox "Registro duplicado"

    Else
    End If
    rs.Close
    Set rs = Nothing
    End Sub


    Percebi que os espaços em branco estão sendo ignorados, só está dando certo com as letras sem acentos e com acentos. Agora quando eu coloco uma frase com espaço e outra com espaço duplo ou até sem espaço, tudo juntos o formulário grava na tabela embora no código esteja colocado para não gravar já que ficou assim (..."" , " ")
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 27/2/2012, 18:57

    Você está invertendo. Coloque o espaço antes e o sem espaço depois:



    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    emacsabino
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 190
    Registrado : 29/08/2011

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  emacsabino 27/2/2012, 19:03

    Correto Críquio, desculpa eu abusar muito de vocês para resolver esses problemas. Muito obrigado
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  criquio 27/2/2012, 19:37

    Bom que resolveu. Pouco a pouco vamos prosseguindo até que quando dermos conta, já percorremos grande parte do caminho Smile


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.


    Conteúdo patrocinado


    [Resolvido]não aceitar dados iguais, ignorando espaço e acentos Empty Re: [Resolvido]não aceitar dados iguais, ignorando espaço e acentos

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 07:30