MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Como Ignorar palavras acentuadas em pequisa

    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 22/1/2019, 16:45

    Olá amigos preciso da vossa preciosa ajuda

    Tenho uma bd ja bastante extensa onde utilizo um formulário com campo texto para pesquisa onde ao digitar actualiza uma cx de listagem com o código requery onchange

    Um problema que desde inicio me deparei foi com as palavras acentuadas, ou seja, por exemplo ao digitar "cesar", deveriam aparecer todos os "cesar" e todos os "césar".´

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem11

    Andei por aqui a pesquisar e encontrei algumas soluções que infelizmente não resultaram.

    Criei também o seguinte módulo que retirei de uma outra publicação daqui:

    Código:
    Option Compare Database

    Public Function TodosAcentos(pstrPlain As String) As String
      Const cAlphabet _
          = "aáàâäãå¦" _
          & "cç¦" _
          & "dð¦" _
          & "eéèêë¦" _
          & "f?¦" _
          & "iíìîï¦" _
          & "nñ¦" _
          & "oóòôöõø¦" _
          & "saߦ" _
          & "uúùûü¦" _
          & "yýÿ¦" _
          & "z~"
     
      Dim strAcc() As String
      Dim strLike As String
      Dim intN As Integer
      Dim strP As Integer
      Dim strC As String
     
      strAcc = Split(cAlphabet, "¦")
      For strP = 1 To Len(pstrPlain)
          strC = Mid$(pstrPlain, strP, 1)
          For intN = LBound(strAcc) To UBound(strAcc)
              If InStr(strAcc(intN), strC) = 1 Then
                  strC = "[" & strAcc(intN) & "]"
                  Exit For
              End If
          Next intN
          strLike = strLike & strC
      Next strP
     
      TodosAcentos = strLike
     
    End Function
    Na origem da caixa de listagem consta a seguinte expressão:

    SELECT utentes.id_interno, utentes.SNS, utentes.nome_utente, utentes.c_saude, utentes.dt_nasc, utentes.sexo, utentes.situacao_utente, Int(((Date()-[dt_nasc])-1)/365.25) AS Idade FROM utentes WHERE (((utentes.SNS) Like "*" & [Forms]![update_utentes]![pesquisa].[Text] & "*")) OR (((utentes.nome_utente) Like "*" & TodosAcentos([Forms]![update_utentes]![pesquisa].[Text]) & "*")) OR (((utentes.dt_nasc) Like "*" &

    A questão está que continua a dar erro dizendo que A função TodosAcentos não está definida na expressão tal com está na foto.

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem10

    O que posso estar a fazer mal?

    Toda a ajuda será bem vinda.

    Obrigado
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3624
    Registrado : 04/04/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  Avelino Sampaio em 22/1/2019, 19:12

    Olá!

    veja neste meu artigo uma outra opção (Copie e cole o endereço abaixo no seu navegador):

    usandoaccess.com.br/Dicas/filtrar-independente-acentuacoes-access.asp?id=1

    Sucesso!
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 23/1/2019, 10:32

    Obrigado pela rápida resposta

    Talvez por ignorancia minha, admito já que não programo há alguns anos, não estou a conseguir colocar em prática a sua sugestão.
    A função strConv não está no Access e quando a tento criar dá-me erro.

    Onde devo aplicar... na fonte dos dados da caixa de listagem ou no campo de pesquisa?

    código da caixa de pesquisa:

    Private Sub pesquisa_Change()
    Listagem.Requery
    Me.sub_processos_pesquisa.Requery
    Dim lngItens As Long
    lngItens = Listagem.ListCount
    Contagem = lngItens



    Código da caixa de listagem:
    SELECT utentes.id_interno, utentes.SNS, utentes.nome_utente, utentes.c_saude, utentes.dt_nasc, utentes.sexo, utentes.situacao_utente, Int(((Date()-[dt_nasc])-1)/365.25) AS Idade FROM utentes WHERE (((utentes.SNS) Like "*" & [Forms]![update_utentes]![pesquisa].[Text] & "*")) OR (((utentes.nome_utente) Like "*" & [Formulários]![update_utentes]![pesquisa].[Texto] & "*")) OR (((utentes.dt_nasc) Like "*" &

    Obrigado uma vez mais pela ajuda.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 23/1/2019, 11:06

    StrConv não está no Access? Está sim!  bounce

    De acordo com o artigo apontado pelo mestre Avelino ficaria

    Private Sub pesquisa_Change()
    Listagem.RowSource = "SELECT utentes.id_interno, utentes.SNS, utentes.nome_utente, utentes.c_saude, utentes.dt_nasc, utentes.sexo, utentes.situacao_utente, Int(((Date()-[dt_nasc])-1)/365.25) AS Idade " & _
    "FROM utentes " & _
    "WHERE strConv(utentes.SNS, 2, 1049) Like '*" & strConv([Forms]![update_utentes]![pesquisa].[Text], 2, 1049) & "*' OR strConv(utentes.nome_utente, 2, 1049)  Like '*" & strConv([Formulários]![update_utentes]![pesquisa].[Texto], 2, 1049) & "*' OR (((utentes.dt_nasc) Like "*" & ... parece que aqui faltou algo mais

    Me.sub_processos_pesquisa.Requery
    Dim lngItens As Long
    lngItens = Listagem.ListCount
    Contagem = lngItens


    Você deve colocar a função strConv nos campos de texto que receberiam acentuações. Veja como foi aplicada, releia o artigo e busque compreender o que foi feito.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 23/1/2019, 11:56

    Muitissimo obrigado pela rápida resposta.

    De facto não resulta

    Tanto na fonte dos dados do campo de listagem como no onchange do campo de pesquisa... ja tentei 1001 variações.

    Dá o seguinte erro:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem12

    Se tentar digitar no construtor de querys a função strConv altera-se automaticamente para convCad:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem13

    Mais uma vez apresento as minhas desculpas pela minha ignorância e agradeço toda a ajuda que me possam disponibilizar... ja estou "fuçando" nisto há uns 3 dias
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 23/1/2019, 12:59

    Exemplo. Adapte.
    Anexos
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Attachmentfiltra.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (25 Kb) Baixado 18 vez(es)


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 23/1/2019, 15:32

    Obrigado uma vez mais

    Isto não está fácil...

    De facto funciona super bem no exemplo que me enviou... adaptando ao meu já não funciona.

    Entre muitas tentativas/erro insiste em dar o mesmo
    erro: Syntax error


    Private Sub pesquisa_Change()

    Me!Listagem.RowSource = "select id_interno, SNS, nome_utente, c_saude, dt_nasc, sexo, situacao_utente, Int(((Date()-[dt_nasc])-1)/365.25) AS Idade"
    "from utentes " & _
    "where strconv(SNS, 2, 1049) like '*" & strConv(pesquisa.Text, 2, 1049) & "*' OR srtconv(nome_utente, 2, 1049) like '*" & strConv(pesquisa.Text, 2, 1049) & "*' OR strconv (dt_nasc, 2, 1049) like '*" & strConv(pesquisa.Text, 2, 1049) & "*' " & _
    "order by nome_utente;"



    Me.sub_processos_pesquisa.Requery
    Dim lngItens As Long
    lngItens = Listagem.ListCount
    Contagem = lngItens
    End Sub
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 23/1/2019, 16:01

    Ensinamento:
    Na propriedade rowsource você está montando uma instrução sql e pensando na estética do código alguns desenvolvedores preferem fazer uma quebra de linha para colocar uma linha para os campos, outra para tabelas e outra para filtros e assim em diante, observe:
    Código:
    ....rowsource = "select campoFulano " & _
                   "from tblTabelaSicrana;"

    No fim o access interpreta como uma linha só, ficando assim
    Código:
    ....rowsource = "select campoFulano from tblTabelaSicrana;"

    Todavia, no código que você mandou na última mensagem você está montando assim:
    Código:
    ....rowsource = "select campoFulano" & _
                   "from tblTabelaSicrana;"

    E na hora do access interpretar está ficando assim
    ....rowsource = "select campoFulanofrom tblTabelaSicrana;"

    Viu o erro? Está faltando um espaço aqui, depois de idade: ...AS Idade" & _

    Outra coisa, repetindo, você deve colocar a função strConv nos campos de texto talvez recebam acentuações, dito isto, acho que não precisaria para data de nascimento
    Código:
    strconv (dt_nasc, 2, 1049)
    *A não quer se esse campo você coloque por extenso

    Aplique as dicas e diga se dá certo... aguardo


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 23/1/2019, 16:53

    Boas meu amigo

    Muitissimo obrigado

    Alguma coisa fiz bem porque deixou de dar qualquer errro, no entanto continua sem funcionar... acredito que agora deve ser apenas uma questão de acertos..

    Antes de digitar qualquer nome fica assim:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem14


    Basta digitar uma qualquer letra:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem15

    Acredito que a questão deve estar na passagem dos parâmetros para o campo listagem.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 23/1/2019, 18:39

    antes da linha Me.sub_processos_pesquisa.Requery adicione msgbox Me!Listagem.RowSource e coloque a imagem da mensagem que aparecerá aqui para análise


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 24/1/2019, 09:42

    Bom dia amigo
    Ontem já não estava no trabalho quando solicitou a alteração do código que desde já muito agradeço.

    Aqui vai então
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem16

    O resultado sem a alteração do código da caixa de pesquisa ao digitar o nome cesar era assim:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem18

    A construção da consulta da cx de listagem sem alterações estava assim
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem19:

    A construção da consulta da cx de listagem como está actualmente segue em baixo:
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem17

    Se ajudar a vista de estrutura do formulario segue em baixo
    [Resolvido]Como Ignorar palavras acentuadas em pequisa Imagem20


    Grande abraço e mais uma vez muito obrigado
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 24/1/2019, 11:58

    Veja na imagem da caixa de mensagem que você continua não colocando espaço na montagem do comando sql. Anexe seu banco de dados aqui para que possamos solucionar.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 24/1/2019, 12:06

    Obrigado meu amigo

    Pois... também dei conta disso, agora eu coloco la o espaço e Visual Basic anula-o, não percebo bem porquê, aliás... mesmo o sugestor de construção de código não me está a ficar disponível...vou ver o que se passa.

    O problema de colocar aqui o banco inteiro é que já vai com mais de 1 Gb de dados registados.

    Vou insistir com isto e se entretanto encontrar solução ou necessitar de mais alguma ajuda volto a postar.

    Muito muito muito obrigado
    avatar
    cbraia
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 27
    Registrado : 12/07/2010

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  cbraia em 24/1/2019, 12:33

    EUREKA!!!!

    Resultou.

    Muito obrigado por toda a colaboração e ajuda. Jamais conseguiria sem a sua preciosa ajuda.

    Grande abraço
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 24/1/2019, 14:09

    O fórum agradece seu retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2306
    Registrado : 22/11/2016

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  DamascenoJr. em 24/1/2019, 18:14

    E o resolvido do tópico?


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    crysostomo
    crysostomo
    VIP
    VIP

    Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1383
    Registrado : 23/01/2018

    [Resolvido]Como Ignorar palavras acentuadas em pequisa Empty Re: [Resolvido]Como Ignorar palavras acentuadas em pequisa

    Mensagem  crysostomo em 3/7/2019, 13:26

    Bom dia, excelente Ivan , estava fazendo um modulo e estava dando erro, essas poucas linhas funcionou


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.

      Data/hora atual: 24/10/2020, 07:14