CONSULTA SQL

MAFACILITY 03/01/2010 01:11:47
#330928
Executo esta função em uma consulta em um mdb remotamente, esta função tira os acentos das palavras a serem consultadas, ela passa por todos os campos e verifica se há a palavra que está sendo consultada. Percebi que as palavras que começam em [Ô]S[Ô] está retornando resultado false. Se alguém puder dar uma olhada agradeço.

[ô]#Função que tira todos os acentos das palavras
function TiraAcento(StrAcento)
for i = 1 to len(StrAcento)
Letra = mid(StrAcento, i, 1)
Select Case Letra
Case [Ô]á[Ô],[Ô]Á[Ô],[Ô]à[Ô],[Ô]À[Ô],[Ô]ã[Ô],[Ô]Ã[Ô],[Ô]â[Ô],[Ô]Â[Ô],[Ô]â[Ô],[Ô]ä[Ô],[Ô]Ä[Ô]
Letra = [Ô]A[Ô]
Case [Ô]é[Ô],[Ô]é[Ô],[Ô]ê[Ô],[Ô]Ê[Ô],[Ô]Ë[Ô],[Ô]ë[Ô],[Ô]È[Ô],[Ô]è[Ô]
Letra = [Ô]E[Ô]
Case [Ô]í[Ô],[Ô]Í[Ô],[Ô]ï[Ô],[Ô]Ï[Ô],[Ô]Ì[Ô],[Ô]ì[Ô]
Letra = [Ô]I[Ô]
Case [Ô]ó[Ô],[Ô]Ó[Ô],[Ô]ô[Ô],[Ô]Ô[Ô],[Ô]õ[Ô],[Ô]Õ[Ô],[Ô]ö[Ô],[Ô]Ö[Ô],[Ô]ò[Ô],[Ô]Ã’[Ô]
Letra = [Ô]O[Ô]
Case [Ô]ú[Ô],[Ô]Ú[Ô],[Ô]Ù[Ô],[Ô]ù[Ô],[Ô]ú[Ô],[Ô]û[Ô],[Ô]ü[Ô],[Ô]Ü[Ô],[Ô]Û[Ô]
Letra = [Ô]U[Ô]
Case [Ô]ç[Ô],[Ô]Ç[Ô]
Letra = [Ô]C[Ô]
Case [Ô]ñ[Ô]
Letra = [Ô]N[Ô]
End Select
texto = texto & Letra
next
TiraAcento = texto
end function



strURL = Request.ServerVariables([Ô]URL[Ô])

strSearch = Request.QueryString([Ô]search[Ô])


If strSearch <> [Ô][Ô] Then

strDBPath = Server.MapPath([Ô]adm.mdb[Ô])

Const adUseClient = 3

Set cnnSearch = Server.CreateObject([Ô]ADODB.Connection[Ô])

cnnSearch.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[Ô] & strDBPath & [Ô];[Ô]
cnnSearch.CursorLocation = adUseClient

[txt-color=#0000f0]strSQL = [Ô]SELECT autonum, titulo,dormitorio,suite,preco,descricao,foto1 [Ô] _
& [Ô]FROM imovel [Ô] _
& [Ô]WHERE titulo LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR preco LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR descricao LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR autonum LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]ORDER BY preco asc;[Ô]
[/txt-color]
Set rstSearch = cnnSearch.Execute(strSQL)
intContador = rstSearch.RecordCount

%>
NETMANIA 04/01/2010 10:51:13
#330993
Resposta escolhida
Ola MAFACILITY,

Fiz uam alteração na sua função para ele retornar a letra que não precisam sofrer alterações. Verifique se o problema foi sanado.

O trecho alterado está em itálico.

function TiraAcento(StrAcento)

for i = 1 to len(StrAcento)

Letra = mid(StrAcento, i, 1)

Select Case Letra
Case [Ô]á[Ô],[Ô]Á[Ô],[Ô]à[Ô],[Ô]À[Ô],[Ô]ã[Ô],[Ô]Ã[Ô],[Ô]â[Ô],[Ô]Â[Ô],[Ô]â[Ô],[Ô]ä[Ô],[Ô]Ä[Ô]
Letra = [Ô]A[Ô]
Case [Ô]é[Ô],[Ô]é[Ô],[Ô]ê[Ô],[Ô]Ê[Ô],[Ô]Ë[Ô],[Ô]ë[Ô],[Ô]È[Ô],[Ô]è[Ô]
Letra = [Ô]E[Ô]
Case [Ô]í[Ô],[Ô]Í[Ô],[Ô]ï[Ô],[Ô]Ï[Ô],[Ô]Ì[Ô],[Ô]ì[Ô]
Letra = [Ô]I[Ô]
Case [Ô]ó[Ô],[Ô]Ó[Ô],[Ô]ô[Ô],[Ô]Ô[Ô],[Ô]õ[Ô],[Ô]Õ[Ô],[Ô]ö[Ô],[Ô]Ö[Ô],[Ô]ò[Ô],[Ô]Ã’[Ô]
Letra = [Ô]O[Ô]
Case [Ô]ú[Ô],[Ô]Ú[Ô],[Ô]Ù[Ô],[Ô]ù[Ô],[Ô]ú[Ô],[Ô]û[Ô],[Ô]ü[Ô],[Ô]Ü[Ô],[Ô]Û[Ô]
Letra = [Ô]U[Ô]
Case [Ô]ç[Ô],[Ô]Ç[Ô]
Letra = [Ô]C[Ô]
Case [Ô]ñ[Ô]
Letra = [Ô]N[Ô]
Else
Letra = Letra

End Select

texto = texto & Letra
next

TiraAcento = texto

end function
MAFACILITY 04/01/2010 16:59:26
#331038
Não funcionou, engraçado só não acha palavras começadas com a letra [Ô]S[Ô] com Sítio ou Sitio, Suíte ou Suite
NETMANIA 04/01/2010 17:19:56
#331041
Eu cometi um pequeno erro no trecho do else, que o correto era Case Else. Quanto a função alterar os textos com a letra [Ô]S[Ô], eu fiz um teste aqui através de um pequeno programa em VB 6 usando a sua função e este erro não aconteceu. Se você tiver o Visual Basic 6, tente executar o projeto teste que eu fiz.

Uma outra coisa, vi que você usa o mesmo campo várias vezes na mesma consulta, por que você não simplifica a operação assim:

[ô]Pega a string e retira os acentos e trata a string
strSearch = TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô]))

strSQL = [Ô]SELECT autonum, titulo,dormitorio,suite,preco,descricao,foto1 [Ô] _
& [Ô]FROM imovel [Ô] _
& [Ô]WHERE titulo LIKE [ô]%[Ô] & strSearch & [Ô]%[ô] [Ô] _
& [Ô]OR preco LIKE [ô]%[Ô] & strSearch & [Ô]%[ô] [Ô] _
& [Ô]OR descricao LIKE [ô]%[Ô] & strSearch & [Ô]%[ô] [Ô] _
& [Ô]OR autonum LIKE [ô]%[Ô] & strSearch & [Ô]%[ô] [Ô] _
& [Ô]ORDER BY preco asc;[Ô]

Com isso você não executa a operação de remoção de acentos e limpeza de caracteres inválidos uma única vez e não 1 e mais 3 vezes desnecessariamente.

Por último, se o erro persistir, mande exibir o resultado da varíavel strSearch logo após a execução da função TirarAcento para ver o que retorna. Se neste trecho estiver tudo Ok, imprima o SQL para ver o que retornou. Se quiser, passe o seu telefone através do sistema de correio do VBMania que entro em contato para ajudar a verificar o erro.
MAFACILITY 04/01/2010 17:42:30
#331042
Valeu véio vou testar aqui !!!
MAFACILITY 04/01/2010 18:25:30
#331046
Véio resolvi o problema da seguinte forma fiz uma gambiarra rsrsrs na seleção dos dados, na minha tabela eu tenho um campo chamado tipo, eu fiz o seguinte:
strSQL = [Ô]SELECT autonum,tipo,titulo,dormitorio,suite,preco,descricao,foto1 [Ô] _
& [Ô]FROM imovel [Ô] _
& [Ô]WHERE titulo LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR preco LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR descricao LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
& [Ô]OR autonum LIKE [ô]%[Ô] & TiraAcento(Replace(strSearch, [Ô][ô][Ô], [Ô][ô][ô][Ô])) & [Ô]%[ô] [Ô] _
[txt-color=#0000f0]& [Ô]OR tipo= [ô]sítio[ô][Ô] _[/txt-color][ô] [ô] « AQUI
& [Ô]ORDER BY preco asc;[Ô]

agradeço pela ajuda, agora estou com um outro problema, [txt-color=#e80000]não está respeitando a ordenação ascendente do preço.[/txt-color]
NETMANIA 05/01/2010 08:38:30
#331065
Qual é o tipo deste campo que você está usando? Seria possível você enviar um pedaço desta tabela para fazer um teste?
MAFACILITY 05/01/2010 22:54:00
#331119
ESTRUTURA DA TABELA:

AUTONUM - TITULO - DORMITORIO - SUITE - TIPO - DESCRICAO - FOTO1 ... FOTO8

TIPO é UM CAMPO TEXT, O NOME DO CAMPO é TIPO MAS NA VERDADE é A CATEGORIA DO IMOVEL: CASA,SÍTIO,APARTAMENTO,LOTE,CHÁCARA, ETC.
NETMANIA 07/01/2010 14:32:16
#331311
Se o campo preço for um tipo texto, pode ocorrer esta falha. Tente alterar ele para currency para ver se não apresenta mais esta falha?
MAFACILITY 09/01/2010 20:20:43
#331473
é isso mesmo netmania, na hora em que criei o campo preco coloquei ele como text e não percebi, já alterei para currency e funcionou perfeitamente. Obrigado...
Tópico encerrado , respostas não são mais permitidas