Discussion:
Ignorar Acentos em Pesquisa Sql
Allan
2004-08-15 05:19:59 UTC
Permalink
Olá pessoal, não sei se posso fazer essa pergunta aki, se nao puder, favor ignorar..

Tenho um bd em Firebird 1.5, com Charset Win1252, e Collate PXW_INTL850 ligado pelo DbExpress no Delphi 7..

Tenho o seguinte código no evento OnChance de um Edit:

DmDados.ClientPersonagens.Close;
With DmDados.SqlPersonagens do
begin
Close;
CommandText :=
'Select * From TbPersonagens Where Upper(Codinome) Like'
+ AnsiUpperCase(QuotedStr(EdtPesquisa.Text+'%'))
+'Order By Codinome';
Open;
end;
DmDados.ClientPersonagens.Open;

Bom, isso me faz com q, se eu tiver um registro de nome "Capitão América" e digitar "CAPITÃO AMÉRICA" ou "capitão américa" ele ache o mesmo... se eu digitar tb "capit", ele acha o registro, mas se eu digitar "capitao" ele nao acha.. justamente por causa do acento..

Tem algum jeito de contornar isso? digo, se eu digitar "capitao america", q ele me mostre o registro de nome "Capitão América", do mesmo jeito q ele ta ignorando as maiúsculas e minúsculas...

Grato pela atençao de todos.. abraços...



Allan Elias Ramos :wink:

==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org

-----------------------------------------
Grupos.com.br - A vida acontece em grupos
RedDevil
2004-08-15 13:30:39 UTC
Permalink
ola Allan Elias.
tudo bem contigo?
sincerely, espero que sim.

Allan, voce poderia usar uma UDF para contornar esse teu problema, e tambem, para a tua felicidade, algum ja "escreveu" um UDF que faz o que voce quer...
putz...
que sorte a tua, nao?
;o)

faz o seguinte: acesse o site da FireBase (www.FireBase.com.br) e na pagina inicial do site, na tua esquerda, em "Top downloads" , selecione TBUDF, e na pagina que se abre, "role" a pagina ate voce encontrar o topico "Arquivos para Interbase e Firebird" (ow Daniel, voce poderia facilitar a vida de muita gente colocando a TBUDF no inicio da pagina, nao? ...;o), que æ voce vai encontrar a biblioteca chamada de TBUDF 2.2...

baixe esse arquivo, descompacte ele, e leia o arquivo "TBUDF.TXT" (ou para o caso de a minha versao estar desatualizada, procure pelo padrao que voce vai encontrar, algo tipow README.TXT, LEIAME.TXT, etc e talz...), que æ voce vai encontrar toda a historia e o modo de usar essa biblioteca de UDFs feita por um usuario fanatico pelo Firebird (nao precisa dizer mais nada...;o).

a funçao que pode resolver o teu problema chama-se: udf_CollateBr

e na sua explanaçao eh dito o seguinte:
----------------------------------------------------------------------
udf_CollateBr

Sintaxe: udf_CollateBr(s: string): string;

Troca os caracteres acentuados por não acentuados e cedilha por C e
converte tudo para maiúsculo. Esta função é útil para se fazer
pesquisas.

Exemplo:

select codigo, nome from tabela
where udf_CollateBr(Nome) = 'JOAO'

Esta consulta retorna os registros com todas as variações do nome
JOAO. Exemplos: joao, joão, João, Joao, JOÃO, JOAO, etc.
----------------------------------------------------------------------

creio que esse lance sera suficiente para resolver o teu problema, a nao ser que a biblioteca de UDFs æ esteja sendo reescrita... se for o caso, eu te sugiro que voce entre em contato com o autor da biblioteca, o Daniel (sorry Daniel, mas agora eu vou te colocar junto com os leões...;o) no endereço de e-mail temp-***@public.gmane.org ...


[]s
força sempre.
ate +++

Luiz "RedDevil" Stefanski
=======><=========
====> Delphi 4 <=====
====> powered <=====
======> by <=======
===> IBObjects <=====
=======><=========
more in:
http://www.RedDevil.eti.br (home)
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630 (tutorial de instalaçao)
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165 (projeto de exemplos e dicas)



----- Original Message -----
From: Allan
To: firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
Sent: Sunday, August 15, 2004 2:19 AM
Subject: [FireBase] Ignorar Acentos em Pesquisa Sql


Olá pessoal, não sei se posso fazer essa pergunta aki, se nao puder, favor ignorar..

Tenho um bd em Firebird 1.5, com Charset Win1252, e Collate PXW_INTL850 ligado pelo DbExpress no Delphi 7..

Tenho o seguinte código no evento OnChance de um Edit:

DmDados.ClientPersonagens.Close;
With DmDados.SqlPersonagens do
begin
Close;
CommandText :=
'Select * From TbPersonagens Where Upper(Codinome) Like'
+ AnsiUpperCase(QuotedStr(EdtPesquisa.Text+'%'))
+'Order By Codinome';
Open;
end;
DmDados.ClientPersonagens.Open;

Bom, isso me faz com q, se eu tiver um registro de nome "Capitão América" e digitar "CAPITÃO AMÉRICA" ou "capitão américa" ele ache o mesmo... se eu digitar tb "capit", ele acha o registro, mas se eu digitar "capitao" ele nao acha.. justamente por causa do acento..

Tem algum jeito de contornar isso? digo, se eu digitar "capitao america", q ele me mostre o registro de nome "Capitão América", do mesmo jeito q ele ta ignorando as maiúsculas e minúsculas...

Grato pela atençao de todos.. abraços...



Allan Elias Ramos :wink:
==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org





cancelar assinatura - página do grupo

==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org

-----------------------------------------
Grupos.com.br - A vida acontece em grupos
t***@public.gmane.org
2004-08-15 13:31:26 UTC
Permalink
Use a função udf_CollateBr da TBUDF.

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br


----- Original Message -----
From: "RedDevil" <reddevil-***@public.gmane.org>
To: <firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org>
Sent: Sunday, August 15, 2004 9:30 AM
Subject: [FireBase] Re: Ignorar Acentos em Pesquisa Sql


> ola Allan Elias.
> tudo bem contigo?
> sincerely, espero que sim.
>
> Allan, voce poderia usar uma UDF para contornar esse teu problema, e
tambem, para a tua felicidade, algum ja "escreveu" um UDF que faz o que voce
quer...
> putz...
> que sorte a tua, nao?
> ;o)
>
> faz o seguinte: acesse o site da FireBase (www.FireBase.com.br) e na
pagina inicial do site, na tua esquerda, em "Top downloads" , selecione
TBUDF, e na pagina que se abre, "role" a pagina ate voce encontrar o topico
"Arquivos para Interbase e Firebird" (ow Daniel, voce poderia facilitar a
vida de muita gente colocando a TBUDF no inicio da pagina, nao? ...;o), que
æ voce vai encontrar a biblioteca chamada de TBUDF 2.2...
>
> baixe esse arquivo, descompacte ele, e leia o arquivo "TBUDF.TXT" (ou para
o caso de a minha versao estar desatualizada, procure pelo padrao que voce
vai encontrar, algo tipow README.TXT, LEIAME.TXT, etc e talz...), que æ
voce vai encontrar toda a historia e o modo de usar essa biblioteca de UDFs
feita por um usuario fanatico pelo Firebird (nao precisa dizer mais
nada...;o).
>
> a funçao que pode resolver o teu problema chama-se: udf_CollateBr
>
> e na sua explanaçao eh dito o seguinte:
> ----------------------------------------------------------------------
> udf_CollateBr
>
> Sintaxe: udf_CollateBr(s: string): string;
>
> Troca os caracteres acentuados por não acentuados e cedilha por C e
> converte tudo para maiúsculo. Esta função é útil para se fazer
> pesquisas.
>
> Exemplo:
>
> select codigo, nome from tabela
> where udf_CollateBr(Nome) = 'JOAO'
>
> Esta consulta retorna os registros com todas as variações do nome
> JOAO. Exemplos: joao, joão, João, Joao, JOÃO, JOAO, etc.
> ----------------------------------------------------------------------
>
> creio que esse lance sera suficiente para resolver o teu problema, a nao
ser que a biblioteca de UDFs æ esteja sendo reescrita... se for o caso, eu
te sugiro que voce entre em contato com o autor da biblioteca, o Daniel
(sorry Daniel, mas agora eu vou te colocar junto com os leões...;o) no
endereço de e-mail temp-***@public.gmane.org ...
>
>
> []s
> força sempre.
> ate +++
>
> Luiz "RedDevil" Stefanski
> =======><=========
> ====> Delphi 4 <=====
> ====> powered <=====
> ======> by <=======
> ===> IBObjects <=====
> =======><=========
> more in:
> http://www.RedDevil.eti.br (home)
> http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630 (tutorial de
instalaçao)
> http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165 (projeto de
exemplos e dicas)
>
>
>
> ----- Original Message -----
> From: Allan
> To: firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
> Sent: Sunday, August 15, 2004 2:19 AM
> Subject: [FireBase] Ignorar Acentos em Pesquisa Sql
>
>
> Olá pessoal, não sei se posso fazer essa pergunta aki, se nao puder,
favor ignorar..
>
> Tenho um bd em Firebird 1.5, com Charset Win1252, e Collate PXW_INTL850
ligado pelo DbExpress no Delphi 7..
>
> Tenho o seguinte código no evento OnChance de um Edit:
>
> DmDados.ClientPersonagens.Close;
> With DmDados.SqlPersonagens do
> begin
> Close;
> CommandText :=
> 'Select * From TbPersonagens Where Upper(Codinome) Like'
> + AnsiUpperCase(QuotedStr(EdtPesquisa.Text+'%'))
> +'Order By Codinome';
> Open;
> end;
> DmDados.ClientPersonagens.Open;
>
> Bom, isso me faz com q, se eu tiver um registro de nome "Capitão
América" e digitar "CAPITÃO AMÉRICA" ou "capitão américa" ele ache o
mesmo... se eu digitar tb "capit", ele acha o registro, mas se eu digitar
"capitao" ele nao acha.. justamente por causa do acento..
>
> Tem algum jeito de contornar isso? digo, se eu digitar "capitao
america", q ele me mostre o registro de nome "Capitão América", do mesmo
jeito q ele ta ignorando as maiúsculas e minúsculas...
>
> Grato pela atençao de todos.. abraços...
>
>
>
> Allan Elias Ramos :wink:
> ==========================================================
> Visite o site www.firebase.com.br para ter acesso à
artigos,dicas,downloads e muito mais!
> Para acessar a página da lista vá até
http://www.grupos.com.br/grupos/firebase-br
> Para consultar mensagens antigas use o endereço
http://search.gmane.org/search.php?&group=firebase
> Para CANCELAR sua assinatura envie um email para
cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
>
>
>
>
>
> cancelar assinatura - página do grupo
>
> ==========================================================
> Visite o site www.firebase.com.br para ter acesso à
artigos,dicas,downloads e muito mais!
> Para acessar a página da lista vá até
http://www.grupos.com.br/grupos/firebase-br
> Para consultar mensagens antigas use o endereço
http://search.gmane.org/search.php?&group=firebase
> Para CANCELAR sua assinatura envie um email para
cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
>
> -----------------------------------------
> Grupos.com.br - A vida acontece em grupos
>
>


==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org

-----------------------------------------
Grupos.com.br - A vida acontece em grupos
Allan
2004-08-15 19:32:19 UTC
Permalink
Olá RedDevil e Daniel, eu fiz o seguinte:

Baixie o Arquivo Udf, compilei pelo Delphi e copiei o arquivo .dll pra pasta UDF do Firebird.. depois eu executei o arquivo .sql dentro da base de dados pelo IbExpert e criou as udf's la dentro...

Bom, quando eu rodo a aplicação com o seguinte código, da um erro:

With DmDados.SqlPersonagens do
begin
Close;
CommandText :=
'Select * From TbPersonagens Where udf_CollateBr(Codinome) Like'
+ UpperCase(QuotedStr(EdtPesquisa.Text+'%'))
+'Order By Codinome';
Open;
end;

O erro é q ele nao acha o nome inteiro.. por exemplo, tenho "Capitão América", se eu digitar o "c", ele acha todos com "c", mas se eu digitar "ca", ele nao me retorna nenhum arquivo.. ja tentei tirar o UpperCase da frente e botar AnsiUpperCase e nao funcionou.. o q pode ser isso? Grato pela ajuda...



Allan Elias Ramos




----- Original Message -----
From: RedDevil
To: firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
Sent: Sunday, August 15, 2004 10:30 AM
Subject: [FireBase] Re: Ignorar Acentos em Pesquisa Sql


ola Allan Elias.
tudo bem contigo?
sincerely, espero que sim.

Allan, voce poderia usar uma UDF para contornar esse teu problema, e tambem, para a tua felicidade, algum ja "escreveu" um UDF que faz o que voce quer...
putz...
que sorte a tua, nao?
;o)

faz o seguinte: acesse o site da FireBase (www.FireBase.com.br) e na pagina inicial do site, na tua esquerda, em "Top downloads" , selecione TBUDF, e na pagina que se abre, "role" a pagina ate voce encontrar o topico "Arquivos para Interbase e Firebird" (ow Daniel, voce poderia facilitar a vida de muita gente colocando a TBUDF no inicio da pagina, nao? ...;o), que æ voce vai encontrar a biblioteca chamada de TBUDF 2.2...

baixe esse arquivo, descompacte ele, e leia o arquivo "TBUDF.TXT" (ou para o caso de a minha versao estar desatualizada, procure pelo padrao que voce vai encontrar, algo tipow README.TXT, LEIAME.TXT, etc e talz...), que æ voce vai encontrar toda a historia e o modo de usar essa biblioteca de UDFs feita por um usuario fanatico pelo Firebird (nao precisa dizer mais nada...;o).

a funçao que pode resolver o teu problema chama-se: udf_CollateBr

e na sua explanaçao eh dito o seguinte:
----------------------------------------------------------------------
udf_CollateBr

Sintaxe: udf_CollateBr(s: string): string;

Troca os caracteres acentuados por não acentuados e cedilha por C e
converte tudo para maiúsculo. Esta função é útil para se fazer
pesquisas.

Exemplo:

select codigo, nome from tabela
where udf_CollateBr(Nome) = 'JOAO'

Esta consulta retorna os registros com todas as variações do nome
JOAO. Exemplos: joao, joão, João, Joao, JOÃO, JOAO, etc.
----------------------------------------------------------------------

creio que esse lance sera suficiente para resolver o teu problema, a nao ser que a biblioteca de UDFs æ esteja sendo reescrita... se for o caso, eu te sugiro que voce entre em contato com o autor da biblioteca, o Daniel (sorry Daniel, mas agora eu vou te colocar junto com os leões...;o) no endereço de e-mail temp-***@public.gmane.org ...


[]s
força sempre.
ate +++

Luiz "RedDevil" Stefanski
=======><=========
====> Delphi 4 <=====
====> powered <=====
======> by <=======
===> IBObjects <=====
=======><=========
more in:
http://www.RedDevil.eti.br (home)
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630 (tutorial de instalaçao)
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165 (projeto de exemplos e dicas)



----- Original Message -----
From: Allan
To: firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org
Sent: Sunday, August 15, 2004 2:19 AM
Subject: [FireBase] Ignorar Acentos em Pesquisa Sql


Olá pessoal, não sei se posso fazer essa pergunta aki, se nao puder, favor ignorar..

Tenho um bd em Firebird 1.5, com Charset Win1252, e Collate PXW_INTL850 ligado pelo DbExpress no Delphi 7..

Tenho o seguinte código no evento OnChance de um Edit:

DmDados.ClientPersonagens.Close;
With DmDados.SqlPersonagens do
begin
Close;
CommandText :=
'Select * From TbPersonagens Where Upper(Codinome) Like'
+ AnsiUpperCase(QuotedStr(EdtPesquisa.Text+'%'))
+'Order By Codinome';
Open;
end;
DmDados.ClientPersonagens.Open;

Bom, isso me faz com q, se eu tiver um registro de nome "Capitão América" e digitar "CAPITÃO AMÉRICA" ou "capitão américa" ele ache o mesmo... se eu digitar tb "capit", ele acha o registro, mas se eu digitar "capitao" ele nao acha.. justamente por causa do acento..

Tem algum jeito de contornar isso? digo, se eu digitar "capitao america", q ele me mostre o registro de nome "Capitão América", do mesmo jeito q ele ta ignorando as maiúsculas e minúsculas...

Grato pela atençao de todos.. abraços...



Allan Elias Ramos :wink:
==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org

==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org






cancelar assinatura - página do grupo


==========================================================
Visite o site www.firebase.com.br para ter acesso à artigos,dicas,downloads e muito mais!
Para acessar a página da lista vá até http://www.grupos.com.br/grupos/firebase-br
Para consultar mensagens antigas use o endereço http://search.gmane.org/search.php?&group=firebase
Para CANCELAR sua assinatura envie um email para cancelar-firebase-br-Il65aJm67CNwFqzsTH5u/***@public.gmane.org

-----------------------------------------
Grupos.com.br - A vida acontece em grupos
Loading...