none
Como ignorar acentos em MDB?

    Pergunta

  • Pessoal, faço um select like em base access mas João é diferente de Joao. Como ignorar os acentos? Se fosse SQL tem o Collation.
    domingo, 22 de novembro de 2009 18:53

Respostas

  • No access, a query deve ser feita usando as diferentes possibilidades de acentuação para a mesma letra.

    Exemplo: se desejo buscar na tabela frutas onde há o nome "maçã", seria feito assim:
    select nome from frutas where nome like '%m[áàâäãa][çc][áàâäãa]%'

    Use a função abaixo para solucionar o seu problema:


    Function FormataBusca( Texto )
    dim n, NovoTexto, valorASC
    NovoTexto = ""
    for n = 1 to len( Texto )
    valorASC = asc( mid( Texto, n, 1 ) )
    select case valorASC
    case 39: NovoTexto = NovoTexto & "''"
    case 65: NovoTexto = NovoTexto & "[ÁÀÂÄÃA]"
    case 67: NovoTexto = NovoTexto & "[ÇC]"
    case 69: NovoTexto = NovoTexto & "[ÉÈÊËE]"
    case 73: NovoTexto = NovoTexto & "[ÍÌÎÏI]"
    case 79: NovoTexto = NovoTexto & "[ÓÒÔÖÕO]"
    case 85: NovoTexto = NovoTexto & "[ÚÙÛÜU]"
    case 97: NovoTexto = NovoTexto & "[áàâäãa]"
    case 99: NovoTexto = NovoTexto & "[çc]"
    case 101: NovoTexto = NovoTexto & "[éèêëe]"
    case 105: NovoTexto = NovoTexto & "[íìîïi]"
    case 111: NovoTexto = NovoTexto & "[óòôöõo]"
    case 117: NovoTexto = NovoTexto & "[úùûüu]"
    case else
    if valorASC > 31 and valorASC < 127 then
    NovoTexto = NovoTexto & chr( valorASC )
    else
    NovoTexto = NovoTexto & "_"
    end if
    end select
    next
    FormataBusca = "'%" & NovoTexto & "%'"
    End Function


    Tiago Novaes (MSP, MCP)- http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos
    • Marcado como Resposta WagnerC3 segunda-feira, 23 de novembro de 2009 11:21
    domingo, 22 de novembro de 2009 19:07

Todas as Respostas

  • No access, a query deve ser feita usando as diferentes possibilidades de acentuação para a mesma letra.

    Exemplo: se desejo buscar na tabela frutas onde há o nome "maçã", seria feito assim:
    select nome from frutas where nome like '%m[áàâäãa][çc][áàâäãa]%'

    Use a função abaixo para solucionar o seu problema:


    Function FormataBusca( Texto )
    dim n, NovoTexto, valorASC
    NovoTexto = ""
    for n = 1 to len( Texto )
    valorASC = asc( mid( Texto, n, 1 ) )
    select case valorASC
    case 39: NovoTexto = NovoTexto & "''"
    case 65: NovoTexto = NovoTexto & "[ÁÀÂÄÃA]"
    case 67: NovoTexto = NovoTexto & "[ÇC]"
    case 69: NovoTexto = NovoTexto & "[ÉÈÊËE]"
    case 73: NovoTexto = NovoTexto & "[ÍÌÎÏI]"
    case 79: NovoTexto = NovoTexto & "[ÓÒÔÖÕO]"
    case 85: NovoTexto = NovoTexto & "[ÚÙÛÜU]"
    case 97: NovoTexto = NovoTexto & "[áàâäãa]"
    case 99: NovoTexto = NovoTexto & "[çc]"
    case 101: NovoTexto = NovoTexto & "[éèêëe]"
    case 105: NovoTexto = NovoTexto & "[íìîïi]"
    case 111: NovoTexto = NovoTexto & "[óòôöõo]"
    case 117: NovoTexto = NovoTexto & "[úùûüu]"
    case else
    if valorASC > 31 and valorASC < 127 then
    NovoTexto = NovoTexto & chr( valorASC )
    else
    NovoTexto = NovoTexto & "_"
    end if
    end select
    next
    FormataBusca = "'%" & NovoTexto & "%'"
    End Function


    Tiago Novaes (MSP, MCP)- http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos
    • Marcado como Resposta WagnerC3 segunda-feira, 23 de novembro de 2009 11:21
    domingo, 22 de novembro de 2009 19:07
  • Beleza, é isso. Obrigado. Se não te importa, vou dar uma mexida no código e posto aqui. Se eu colocar São, ele transforma em s_o. Vou fazer ignorar quando digitada a palavra com acento.
    segunda-feira, 23 de novembro de 2009 11:22
  • Poste mesmo.
    Vou esperar e vou usar o seu código melhorado. (se vc não se importar).


    :o) - Viva a comunidade.

    Tiago Santos
    Tiago Novaes (MSP, MCP)- http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos
    segunda-feira, 23 de novembro de 2009 11:47
  • Dei uma mexida no código, porque quando era digitada a palavra com acento, somente procurava ela. Mas se digitava sem acento, procurava todas as formas.

       Function FormataBusca(ByVal ParTexto As String) As String
          Dim n, valorasc As Integer
          Dim NovoTexto As String
          NovoTexto = ""
          ParTexto = TiraOsAcentos(ParTexto)
          For n = 1 To Len(ParTexto)
             valorasc = Asc(Mid(ParTexto, n, 1))
             Select Case valorasc
                Case 39 : NovoTexto = NovoTexto & "''"
                Case 65 : NovoTexto = NovoTexto & "[ÁÀÂÄÃA]"
                Case 67 : NovoTexto = NovoTexto & "[ÇC]"
                Case 69 : NovoTexto = NovoTexto & "[ÉÈÊËE]"
                Case 73 : NovoTexto = NovoTexto & "[ÍÌÎÏI]"
                Case 79 : NovoTexto = NovoTexto & "[ÓÒÔÖÕO]"
                Case 85 : NovoTexto = NovoTexto & "[ÚÙÛÜU]"
                Case 97 : NovoTexto = NovoTexto & "[áàâäãa]"
                Case 99 : NovoTexto = NovoTexto & "[çc]"
                Case 101 : NovoTexto = NovoTexto & "[éèêëe]"
                Case 105 : NovoTexto = NovoTexto & "[íìîïi]"
                Case 111 : NovoTexto = NovoTexto & "[óòôöõo]"
                Case 117 : NovoTexto = NovoTexto & "[úùûüu]"
                Case Else
                   If valorasc > 31 Then
                      NovoTexto = NovoTexto & Chr(valorasc)
                   Else
                      NovoTexto = NovoTexto & "_"
                   End If
             End Select
          Next
          FormataBusca = "'%" & NovoTexto & "%'"
       End Function
    
       Function TiraOsAcentos(ByVal texto As String) As String
          Dim onde As Byte
          Dim i As Integer
          Const vComAcento As String = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜàáâãäåçèéêëìíîïòóôõöùúûü"
          Const vSemAcento As String = "AAAAAACEEEEIIIIOOOOOUUUUaaaaaaceeeeiiiiooooouuuu"
          For i = 1 To Len(texto)
             onde = InStr(1, vComAcento, Mid(texto, i, 1))
             If onde > 0 Then
                Mid(texto, i, 1) = Mid(vSemAcento, onde, 1)
             End If
          Next
          TiraOsAcentos = texto
       End Function
    quarta-feira, 25 de novembro de 2009 17:24
  • Wagner,
    Valew pela melhoria

    Viva a comunidade!

    Tiago Santos
    Tiago Novaes (MSP, MCP)- http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos
    quinta-feira, 26 de novembro de 2009 13:19
  •  

    Acho que vocês estão viajando nas respostas... tudo bem que esse post é do ano passado, mas pesquisei melhor, pois provavelmente haveria um método que já fizesse o tratamento que vocês criaram na função e aqui está:

    SELECT * FROM dbo.Municipios WHERE nome LIKE 'SAO %' COLLATE SQL_Latin1_General_CP1_CI_AI
    
    /* COLLATE SQL_Latin1_General_CP1_CI_AI:
       -> Serve para ignorar acentos e letras maiúsculas/minúsculas.
       -> Existem COLLATEs que ignoram apenas os acentos, ou apenas as maiúsculas e minúsculas. Mas para ambos, é usado esse
    */
    

     

    []'s

    Att, Ramon

    • Sugerido como Resposta Ramon B. F. _ segunda-feira, 20 de dezembro de 2010 10:57
    segunda-feira, 20 de dezembro de 2010 10:57