PESQUISA IGNORANDO ACENTO

EPISCOPAL 08/08/2011 17:50:34
#381100
Eu fiz uma pesquisa no Fórum e arquivos e nao achei nada satisfatorio .... pois estou precisando duma função assim. Suponhamos que eu tenho como fonte de dados para minha pesquisa é um [txt-color=#e80000]arquivo texto[/txt-color] com diversos nomes e digamos que eu quero fazer uma pesquisa e o usuário nao digitou a palavra com acento

Entrada 1 >>> Forum ..... minha função retorna [Ô]Fórum[Ô]
Entrada 2 >>> Topico .... minha função retorna [Ô]Tópico[Ô]

e por ai vai ..... eu já tentei usar a função instr entre outras mas todas consideram o acento .... tem como resolver isso???
ASHKATCHUP 08/08/2011 18:03:24
#381101
Resposta escolhida
Você terá que fazer um replace manual...

(Pseudocodigo)


Dim palavra as String
[ô]
palavra = [Ô]Fórum[Ô]
[ô]
palavra = Replace(palavra,[Ô]á[Ô],[Ô]a[Ô])
palavra = Replace(palavra,[Ô]é[Ô],[Ô]e[Ô])
palavra = Replace(palavra,[Ô]í[Ô],[Ô]i[Ô])
palavra = Replace(palavra,[Ô]ó[Ô],[Ô]o[Ô])
palavra = Replace(palavra,[Ô]ú[Ô],[Ô]u[Ô])
EPISCOPAL 09/08/2011 02:29:20
#381117
grande amigo ASHKATCHUP, eu ja pensei isto .... mas minha base de dados e muito grande levaria alguns segundos para substituir toda base.


Eu so queria um atalho para fazer a procura ...... mas valeuuuuu
LUIZCOMINO 09/08/2011 08:31:26
#381125
Function LimpaTextoBD(Texto As String) As String
Dim Letras As String
Dim Conteudo As String
Dim Compara As String
Dim Busca As String
Dim Concatena As String
Dim i, x, count As Integer
Dim Troca As String

For i = 1 To Len(Texto)
Troca = [Ô][Ô]

Select Case Mid(Texto, i, 1)
Case [Ô]Á[Ô]: Troca = [Ô]A[Ô]
Case [Ô]á[Ô]: Troca = [Ô]a[Ô]
Case [Ô]ã[Ô]: Troca = [Ô]a[Ô]
Case [Ô]Ã[Ô]: Troca = [Ô]A[Ô]
Case [Ô]â[Ô]: Troca = [Ô]a[Ô]
Case [Ô]Â[Ô]: Troca = [Ô]A[Ô]
Case [Ô]à[Ô]: Troca = [Ô]a[Ô]
Case [Ô]À[Ô]: Troca = [Ô]A[Ô]
Case [Ô]Ó[Ô]: Troca = [Ô]O[Ô]
Case [Ô]ó[Ô]: Troca = [Ô]o[Ô]
Case [Ô]õ[Ô]: Troca = [Ô]o[Ô]
Case [Ô]Õ[Ô]: Troca = [Ô]O[Ô]
Case [Ô]Ô[Ô]: Troca = [Ô]O[Ô]
Case [Ô]ô[Ô]: Troca = [Ô]o[Ô]
Case [Ô]é[Ô]: Troca = [Ô]E[Ô]
Case [Ô]é[Ô]: Troca = [Ô]e[Ô]
Case [Ô]Ê[Ô]: Troca = [Ô]E[Ô]
Case [Ô]ê[Ô]: Troca = [Ô]e[Ô]
Case [Ô]ç[Ô]: Troca = [Ô]c[Ô]
Case [Ô]Ç[Ô]: Troca = [Ô]C[Ô]
Case [Ô]Í[Ô]: Troca = [Ô]I[Ô]
Case [Ô]í[Ô]: Troca = [Ô]i[Ô]
Case [Ô]ü[Ô]: Troca = [Ô]u[Ô]
Case [Ô]Ü[Ô]: Troca = [Ô]U[Ô]
Case [Ô]ú[Ô]: Troca = [Ô]u[Ô]
Case [Ô]|[Ô]: Troca = [Ô][Ô]
Case [Ô][Ô]: Troca = [Ô][Ô]
Case [Ô]|[Ô]: Troca = [Ô]e[Ô]
Case [Ô]º[Ô], [Ô]~[Ô], [Ô]'[Ô], [Ô]'[Ô], [Ô][Ô][Ô][Ô], [Ô] [Ô], [Ô]:[Ô], [Ô][ô][Ô]: Troca = [Ô] [Ô]
End Select

If Troca <> [Ô][Ô] Then Mid(Texto, i, 1) = Troca

Next

Letras = [Ô]QWERTYUIOPASDFGHJKLÇZXCVBNMqwertyuiopasdfghjklçzxcvbnm [Ô]
Conteudo = StrReverse(Texto)

For i = 1 To Len(Conteudo)
Busca = Mid(Conteudo, i, 1)
For x = 1 To Len(Letras)
Compara = Mid(Letras, x, 1)
If Compara = Busca Then
Concatena = Concatena + Compara
End If
Next
Next
Conteudo = StrReverse(Concatena)
Conteudo = Trim(Conteudo)
LimpaTextoBD = Conteudo

End Function
MSMJUDAS 09/08/2011 08:31:27
#381126
Outra função:

Citação:

Public Function RemoveAcentos(vCampo As String) As String
Dim I As Integer
Dim vTem As String
Dim vRes As String
vCampo = UCase(vCampo)
vRes = [Ô][Ô]
If Len(I) > 0 Then
For I = 1 To Len(vCampo)
vTem = UCase(Mid$(vCampo, I, 1))
Select Case vTem
Case [Ô]Á[Ô], [Ô]À[Ô], [Ô]Ã[Ô], [Ô]Â[Ô], [Ô]Ä[Ô]
vTem = [Ô]A[Ô]
Case [Ô]é[Ô], [Ô]È[Ô], [Ô]Ê[Ô], [Ô]Ë[Ô]
vTem = [Ô]E[Ô]
Case [Ô]Í[Ô], [Ô]Ì[Ô], [Ô]Î[Ô], [Ô]Ï[Ô]
vTem = [Ô]I[Ô]
Case [Ô]Ó[Ô], [Ô]Ò[Ô], [Ô]Õ[Ô], [Ô]Ô[Ô], [Ô]Ö[Ô]
vTem = [Ô]O[Ô]
Case [Ô]Ú[Ô], [Ô]Ù[Ô], [Ô]Û[Ô], [Ô]Ü[Ô]
vTem = [Ô]U[Ô]
Case [Ô]Ç[Ô]
vTem = [Ô]C[Ô]
Case [Ô]@[Ô]
vTem = [Ô].[Ô]
Case [Ô]º[Ô]
vTem = [Ô]O[Ô]
Case [Ô]ª[Ô]
vTem = [Ô].[Ô]
Case [Ô][ô][Ô]
vTem = [Ô] [Ô]
End Select
vRes = vRes + vTem
Next
End If
RemoveAcentos = vRes
End Function

LUIZCOMINO 09/08/2011 08:33:28
#381127
ele só ira ler os carácteres que estão na varivavel letras
MARCELO.TREZE 09/08/2011 18:39:44
#381172
olha se na base de dados estiver com acento, use o like fica mais prático


select * from tabela where nome like [ô]%função%[ô]

EDERMIR 10/08/2011 15:03:57
#381278
Eu não entendi a questão.

Você vai digitar a palavra FORUM e a função deve retornar a palavra FÓRUM?

Você vai digitar FÓRUM e a função vai retornar FORUM?

No primeiro caso, é difícil saber onde estará o acento na palavra desejada.

No segundo caso, o FIREBIRD permite a pesquisa no LIKE com a substituição apenas da letra desejada, então você pode procurar como [Ô]F_RUM[Ô]

select * from tabela where nome like [ô]%F_RUM%[ô]

EPISCOPAL 12/08/2011 11:38:51
#381551
Gente .... minha base de dados é um arquivo texto...

é o seguinte, digamos que ao digitar a palavra [Ô]fórum[Ô] o usuário esquece do acento e digita [Ô]forum[Ô]

O resultado da pesquisa deverá ser [Ô]FÓRUM[Ô]

nao dá pra usar Like na função Open NomeDo Arquivo

...
Tópico encerrado , respostas não são mais permitidas