Jump to content


Photo

Replace Na Instrução


  • Faça o login para participar
18 replies to this topic

#1 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 26/06/2008, 23:44

eu tenho a seguinte situação:
uma lista de letras
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Cada letra é um link que leva a uma página e que lista os autores que começam com essa letra:
select * from tabela where left(autor,1) = request.querystring("letra")

A dúvida que não quer calar:
E o Érico? e o Ïves? Eles não aparecem. No cadastro, alguns autores possuem a primeira letra acentuada. como eu posso fazer com que esse left(autor,1) ignore a acentuação? :'(

#2 Thiago Lara

Thiago Lara

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Não informado

Posted 27/06/2008, 00:02

cara vou te passar a lógica pq to terminando um projeto e to com preguiça de montar..
se você não conseguir me da um toque aqui no forum que eu monto rapidinho pra vc..

mas saca só..

teremos acento somente em vogais certo? não temos como ter acento em F J... dai faremos o seguinte usaremos replace nas vogais aos seus respectivos caracteres alfa numericos..
fazendo um select case nas mesmas e substituindo por somente a letra correspondente sem acento..

:)


entendeu?

#3 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 27/06/2008, 21:39

pelo que eu entendi vc está falando para mudar a querystring, mas eu não quero mudar a query, quero mudar o valor da tabela.

por exemplo, a querystring é E, mas eu gostaria que listasse Érico, Ênio e Ester, valores presentes ca tabela de dados.

não quero fazer o
"select * from tabela where coluna='" & querystring_sem_acento
eu quero:
"select * from tabela where coluna_sem_acento='" & querystring

daí se o cara for Érico, ênio ou Ëuler, ele vail ser listado

#4 marciovmartins

marciovmartins

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 28/06/2008, 00:03

Não testei... mas vai lá...

"select * from tabela where left(autor,1) LIKE '" & request.querystring("letra") & "%'"

Pelo que me lembro, o LIKE não faz diferença de palavras acentuadas.

Edição feita por: marciovmartins, 28/06/2008, 00:04.


#5 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 28/06/2008, 16:23

DONT LIKE IT :)

o like não fungou lá, continua sem aparecer o Érico Veríssimo

#6 Thiago Lara

Thiago Lara

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Não informado

Posted 28/06/2008, 19:11

pois é pelo q eu lembro também o like é justamente para fazer buscas independente se vc digitar casa ou csa saka? ele acha semelhantes..
o caso do acento estaria incluso ai

#7 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 28/06/2008, 22:31

eu até criei uma função de tratamento de texto, mas não ligou tbm

functio rancabasso(str)

daí eu fiz

select * FROM tabela where rancabasso(left(coluna,1)) ='" querystring...

e não deu certo.

algm tem uma história de sucesso para me contar com relação a isso?

#8 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 29/06/2008, 02:27

E como ficou essa função de tratamento?
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#9 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 29/06/2008, 18:52

Rapaz... Boa noite...

Realmente o LIKE não diferencia palavras acentuadas. Isso só poderia acontecer se seu SQL Server (se for o banco de dados que você está usando, claro), estivesse configurado para isso.

O que você pode fazer é dar uma olhada em posts aqui no próprio fórum, sobre acentuação...
Tem uma área aqui do ASP, só com funções cedidas por usuários, que podem lhe atender neste problema... Funções que tiram os acentos...
Com isso, você pode fazer a busca perfeita, CONTANTO que os dados do seu banco TAMBÉM estejam sem acento.

Abraços, boa sorte!

:D
' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil

#10 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 30/06/2008, 07:30

a função é essa:

function RancaBaço(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

daí eu colocaria

set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE RancaBaço(coluna) ='" & minha_query & "'"

#11 Thiago Lara

Thiago Lara

    Novato no fórum

  • Usuários
  • 13 posts
  • Sexo:Não informado

Posted 30/06/2008, 10:32

Acho melhor vc postar teu codigo aqui e a gente analisar!
do que ficar por partes...

manda a sua pagina de busca e seu resultado ai..

#12 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 30/06/2008, 11:10

a função é essa:

function RancaBaço(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

daí eu colocaria

set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE RancaBaço(coluna) ='" & minha_query & "'"

Não confunda SQL com ASP... Os 2 podem agir em conjunto, porém, não são a mesma coisa...

Você botou a função 'RancaBaço' dentro da instrução SQL. Ao rodar, com certeza vai dar erro, pois NÃO existe essa função DENTRO do SQL... Ela foi criada dentro do seu código ASP, portanto, faz parte somente DELE.
Antes de mais nada, nomes de funções não podem ter quaisquer tipos de acentuação.

Experimente usar a função 'RancaBaco' da seguinte forma:

set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE coluna ='" & RancaBaco(minha_query) & "'"

Abraços, boa sorte!

:D

Edição feita por: Tarkan, 30/06/2008, 11:11.

' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil

#13 JurisCode

JurisCode

    Mestre

  • Usuários
  • 645 posts
  • Sexo:Masculino
  • Localidade:Paraná

Posted 30/06/2008, 21:38

takam valeu pela ajuda, mas ficou na mesma. onde tem os acentos são nas tabelas de dados e não na minha query
acredite, eu já usei rancabaco, tratapalavra, tiraacento e não fungou, o nome da função é indiferente, porque não estou vendo um meio de tratar os valores que vêm do banco de dados, mas só os valores das querys.

#14 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 30/06/2008, 22:20

Acho que você não entendeu, vou tentar ser mais claro...

Quando falei pra vc trocar o nome da função, foi por causa do ç, que estava nela.
Acentuações em nomes de funçoes e/ou variáveis, não existe em programação. Agora se o nome é Rancabaco (sem o ç) ou Rancatudo ou qualquer outro, isso sim, realmente é indiferente.

Quanto a não retornar o resultado, isso com certeza não vai trazer, se os dados não forem EQUIVALENTES ao que você está passando para o banco de dados.

Exemplo: Se sua função Rancabaco está tirando os acentos e está jogando isso para a instrução SQL, você está solicitando do SQL dados que também estejam sem acento. Os que tiverem acento, com certeza não vão voltar...

Como eu disse no meu post acima:

Realmente o LIKE não diferencia palavras acentuadas. Isso só poderia acontecer se seu SQL Server (se for o banco de dados que você está usando, claro), estivesse configurado para isso.

...
Com isso, você pode fazer a busca perfeita, CONTANTO que os dados do seu banco TAMBÉM estejam sem acento.

Entendeu?
Maneiras de resolver:

Se você tem acesso a configuração do servidor de banco de dados, configure o seu banco para aceitar buscas que não tenham accent-sensitive (sei lá se escrevi certo);
- Com isso, você nem precisa da função Rancabaco, pois o SQL vai te devolver o resultado com ou sem acento.

Se você não tem acesso a configuração do servidor de banco de dados, experimente dar update na sua tabela de dados, usando replace em todos os dados do seu banco, para TIRAR TODOS os acentos.
- Com isso, todos os dados sem acento (retirados pela função Rancabaco) serão exibidos normalmente.

Abraços, boa sorte!

:D



------------------------------------------------------------------------
EDITANDO:

Rapaz... Pensei melhor... Nem precisa de update e nem de configurar nada!
Qual banco de dados você está usando, SQL Server?
Experimente fazer uma função Rancabaco TAMBÉM no SQL...

Bote depois esta função no WHERE da sua consulta e insira esta consulta numa stored procedure, que será chamada pelo ASP.
Ficará algo do tipo:

CREATE PROCEDURE ListaTudo
@texto varchar(256)
AS

SELECT * FROM tabela WHERE dbo.Rancabaco(coluna) LIKE '%' + @texto + '%'

E para chamar, no ASP:

set RS = Conexao.EXECUTE("EXEC ListaTudo '" & RancaBaco(minha_query) & "'")

Abraços, boa sorte!

:D

Edição feita por: Tarkan, 30/06/2008, 22:21.

' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil

#15 acooper

acooper

    Ativo

  • Usuários
  • 368 posts
  • Sexo:Masculino
  • Localidade:Recreio dos Bandeirantes

Posted 08/12/2008, 10:06

Caro, estou buscando um solução para o meu problema, que é parecido com o seu é resolvi tentar ajudar.

Vc já tentou usar TRANSLATE(COLUNA,'ÁÇÉÍÓÚ.......','ACEIOU......')''

Espero ter ajudado.

Abraço.
Andre Figueiredo
Analista de Sistema Senior
Tel.: + 55 - (21) 3824-4698- Cel: + 55 - (21) 9127-2772
E-Mail: andre.figueiredo@veirano.com.br
Skype: andre.figueiredo.veirano.com.br




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq