problemas com acentos e maiusculas no SQL!!!
e ai galera , blz? o porblema é o seguinte ...tenho um banco de dados com muitos nomes.... eles estao digitados todos com maiusculas na primeira letra e seus devidos acentos , tipo ´ Maria José de Souza ´ ...
para fazer consultas isso nao seria interessante , resolvi entao colocar os devidos comandos em sql para q ele ignore maiusculas !!! ai tudo blz ... digito a palavra a ser pesquisada em tudo em minusculas e ele acha legal!
agora o problema é o seguinte eu tenho um cadastro com o nome José no inicio por exemplo ... eu digito jose pra pesquisar e ele nao acha! certo neh??? mas o estranho é q eu digitando josé , ele TBM nao acha!!! e ja descobri q ta dando erro por causa do comando pra ignorar maisculas , pois quando eu tiro ele roda tudo blz...digito José e acha tudo numa boa !!! sabem o q pode ser isso? ou qual o comando no SQL pra ele ignoras maisculas e acentos ???
o codigo q estouusando atualmente é esse:
//******************************************************
procedure TFormLocaliza.BitBtn1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Text:=
´Select * From Dados Where Upper(Nome) Like ´´¬´+UpperCase(Edit1.Text)+´¬´´ ´;
Query1.Open;
if QueryTelemar.RecordCount=0 then
Begin
ShowMessage(´Nenhum registro encontrado!´);
end;
end;
//**********************************************************
agradeço a todos pela atençao !
valew!
para fazer consultas isso nao seria interessante , resolvi entao colocar os devidos comandos em sql para q ele ignore maiusculas !!! ai tudo blz ... digito a palavra a ser pesquisada em tudo em minusculas e ele acha legal!
agora o problema é o seguinte eu tenho um cadastro com o nome José no inicio por exemplo ... eu digito jose pra pesquisar e ele nao acha! certo neh??? mas o estranho é q eu digitando josé , ele TBM nao acha!!! e ja descobri q ta dando erro por causa do comando pra ignorar maisculas , pois quando eu tiro ele roda tudo blz...digito José e acha tudo numa boa !!! sabem o q pode ser isso? ou qual o comando no SQL pra ele ignoras maisculas e acentos ???
o codigo q estouusando atualmente é esse:
//******************************************************
procedure TFormLocaliza.BitBtn1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Text:=
´Select * From Dados Where Upper(Nome) Like ´´¬´+UpperCase(Edit1.Text)+´¬´´ ´;
Query1.Open;
if QueryTelemar.RecordCount=0 then
Begin
ShowMessage(´Nenhum registro encontrado!´);
end;
end;
//**********************************************************
agradeço a todos pela atençao !
valew!
Pedrohventura
Curtidas 0
Respostas
Bon Jovi
07/07/2004
Ao invés de UpperCase use AnsiUpperCase.
GOSTEI 0
Pedrohventura
07/07/2004
ola bom jovi , o comando AnsiUpperCase Resolveu em partes o problema , aquele problema de quando eu digitava ´josé´ e ele nao achava ja ta blz !!!!
mas o q esta faltando é algum comando pra fazer o sql ignorar o acento...
tipo eu digitar ´ jose ´ sem acento e ele achar o registro (q no caso esta acentuado)... existe alguma forma de fazer isso???
mas o q esta faltando é algum comando pra fazer o sql ignorar o acento...
tipo eu digitar ´ jose ´ sem acento e ele achar o registro (q no caso esta acentuado)... existe alguma forma de fazer isso???
GOSTEI 0
Lucas Silva
07/07/2004
Uma solução é vc travar os acentos, quando o usuário insere os dados na sua aplicação.
GOSTEI 0
Pedrohventura
07/07/2004
mas o problema é q o banco de dados ja esta pronto e com muitos registros !!!
GOSTEI 0
Bon Jovi
07/07/2004
ola bom jovi , o comando AnsiUpperCase Resolveu em partes o problema , aquele problema de quando eu digitava ´josé´ e ele nao achava ja ta blz !!!!
mas o q esta faltando é algum comando pra fazer o sql ignorar o acento...
tipo eu digitar ´ jose ´ sem acento e ele achar o registro (q no caso esta acentuado)... existe alguma forma de fazer isso???
Ok. Mas agora é necessário saber qual banco vc tá usando.
GOSTEI 0
Pedrohventura
07/07/2004
eu to usando paradox...vou ate aproveitar pra perguntar..esse banco tem cerca de 500.000 registros...e as buscas estao muito lentas !!! sera q tem um jeito de deixar isso + rapido??? sera q vale a pena converter??? o q acham?
obrigado!
obrigado!
GOSTEI 0
Bon Jovi
07/07/2004
Melhor mesmo mudar de banco.
Sobre a questão veja se esses tópicos podem ajudar:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=22386
http://delphiforum.icft.com.br/forum/viewtopic.php?t=20961
http://delphiforum.icft.com.br/forum/viewtopic.php?t=14681
http://delphiforum.icft.com.br/forum/viewtopic.php?t=9309
Nunca participei de um sistema que tivesse esse requisito, mas uma outra alternativa que imagino no momento seria vc criar uma coluna nova pra guardar o nome sem acento.
Claro, teria que antes fazer um programinha temporário pra atualizar os registros existentes. O programinha só rodaria uma vez... nao importaria a lentidao do loop.
Aí no seu sistema toda vez que gravar ´NOME´ usaria uma função via Delphi pra retirar os acentos e gravar em ´NOME_SEM_ACENTO´...
ClientDataSet1.FieldByName(´NOME_SEM_ACENTO´).AsString := RetiraAcento(edtNome.Text);
Se essa situação for em muitas tabelas pode não valer a pena. Avalie seu caso pra ver o q é melhor. Podendo tb avaliar a questão de só gravar sem acento mesmo, como o Lucas falou. Pois basta vc fazer o programinha pra atualizar a base existente.
Sobre a questão veja se esses tópicos podem ajudar:
http://delphiforum.icft.com.br/forum/viewtopic.php?t=22386
http://delphiforum.icft.com.br/forum/viewtopic.php?t=20961
http://delphiforum.icft.com.br/forum/viewtopic.php?t=14681
http://delphiforum.icft.com.br/forum/viewtopic.php?t=9309
Nunca participei de um sistema que tivesse esse requisito, mas uma outra alternativa que imagino no momento seria vc criar uma coluna nova pra guardar o nome sem acento.
Claro, teria que antes fazer um programinha temporário pra atualizar os registros existentes. O programinha só rodaria uma vez... nao importaria a lentidao do loop.
Aí no seu sistema toda vez que gravar ´NOME´ usaria uma função via Delphi pra retirar os acentos e gravar em ´NOME_SEM_ACENTO´...
ClientDataSet1.FieldByName(´NOME_SEM_ACENTO´).AsString := RetiraAcento(edtNome.Text);
Se essa situação for em muitas tabelas pode não valer a pena. Avalie seu caso pra ver o q é melhor. Podendo tb avaliar a questão de só gravar sem acento mesmo, como o Lucas falou. Pois basta vc fazer o programinha pra atualizar a base existente.
GOSTEI 0