GARANTIR DESCONTO

Fórum Consulta Independente de acento #515668

03/04/2015

0

Gostaria de saber se é possível fazer uma consulta sem mexer no banco, pelo delphi mesmo, pesquisando palavras com acento mais sem escrever na pesquisa com acento.

Ex:
Pesquisa joao

Resultado joao, joão, JOÃO
Narba Silva

Narba Silva

Responder

Posts

03/04/2015

Narba Silva

Essas formas que você passou eu encontrei mais não me ajudam.

Assim, no meu banco existe o nome João salvo com acento, então ao consultar "joao" ele deveria buscar todos com ou sem acento no banco.

Com essas funções são trocados os acentos para a busca no delphi e nao no banco que vai continuar não trazendo o que quero.
Responder

Gostei + 0

03/04/2015

Marcos P

O argumento original da pesquisa ( com acento) deve ser convertido por uma dessas funções e passado ao banco JUNTO com o argumento original... João + Joao.

Se for necessário tratar maiusculas faça mais uma função q converta os dois argumentos passando 4 parâmetros ao banco.... João + Joao + JOÃO + JOAO.

E, é isso...
Responder

Gostei + 0

03/04/2015

Narba Silva

Seria difícil você ou alguém me mostrar exemplos de como fazer ?

Para ignorar palavras maiúsculas e minusculas fiz assim:

 DM.DSet_Clientes.Close;
   DM.DSet_Clientes.SelectSQL.Clear;
   DM.DSet_Clientes.SelectSQL.Add('select * from clientes where UPPER(cli_nome) like  :nome');
   DM.DSet_Clientes.ParamByName('nome').AsString:= '%'+uppercase(edit_pesquisa.text)+'%';
   DM.DSet_Clientes.Open;



Vi lugares dizendo pra usar o ''AnsiUpperCase'' , para ignorar acentos, mais não deu certo.


Seria difícil me mostrar exemplos de como fazer com acentos?
Responder

Gostei + 0

03/04/2015

Marcos P

Qualquer código de conversão baseado em funções do lado da aplicação, não vai descartar a necessidade de passar mais de um parâmetro de pesquisa, pois, no banco você tem todos os tipos de ocorrência.
Com acentuação...
Sem acentuação...
Maiúsculas...
Minúsculas...

Não consigo simular isso agora, mas pense em uma query com 4 parâmetros... pode ser uma solução.

Na sequência posso preparar algo de código.
Responder

Gostei + 0

03/04/2015

Ricardo

Eu utilizo exatamente dessa forma com Firebird e MySQL perfeitamente; não importa se é maiúsculo, minúsculo e acentuado.

with query do
    begin
      close;
      sql.Clear;
      sql.Add('select campos from tabela');
      SQL.Add('where upper(campo) like upper('+ QuotedStr('%' + Edit.Text + '%'));
      sql.Add(')');
      sql.Add('order by upper(campo)');
      open;
    end;
Responder

Gostei + 0

03/04/2015

Narba Silva

O meu fiz no interbase 6.5 tem como eu passar pro firebird ?

Como fazer?
Responder

Gostei + 0

03/04/2015

Narba Silva

O meu fiz no interbase 6.5 tem como eu passar pro firebird ?

Como fazer?
Responder

Gostei + 0

03/04/2015

Ricardo

O meu fiz no interbase 6.5 tem como eu passar pro firebird ?

Como fazer?


Firebird e Interbase são o mesmo banco, então creio que se você usar dessa forma que demonstrei não vai ter erros.

Tente ai e poste o resultado.
Responder

Gostei + 0

03/04/2015

Narba Silva

NÃO DEU CERTO.

MEU BANCO ES
Responder

Gostei + 0

03/04/2015

Narba Silva

NÃO DEU CERTO.

MEU BANCO ESTÁ COM EXTENSÃO GDB, SÓ PRA VOCÊS SABEREM NÃO SEI SE IMPORTA.

TENTEI FAZER O CÓDIGO ACIMA MAIS EM RELAÇÃO A MAIÚSCULA E MINUSCULA FUNCIONA , ACENTO NÃO

NO BANCO TEM Thaís e João.

Pesquiso thais e joao ele retorna nada.
Responder

Gostei + 0

03/04/2015

Ricardo

NÃO DEU CERTO.

MEU BANCO ESTÁ COM EXTENSÃO GDB, SÓ PRA VOCÊS SABEREM NÃO SEI SE IMPORTA.

TENTEI FAZER O CÓDIGO ACIMA MAIS EM RELAÇÃO A MAIÚSCULA E MINUSCULA FUNCIONA , ACENTO NÃO

NO BANCO TEM Thaís e João.

Pesquiso thais e joao ele retorna nada.


Estranho, deveria funcionar! Então deve ser alguma coisa no Interbase.

Eu coloco aqui JOÃO e se procurar por JOÃO, JoãO, joao, joão, joÃO, JOAO etc... ele encontra normalmente.
Responder

Gostei + 0

03/04/2015

Marcos P

Teabalhe do lado da aplicação com a função de retirada dos acentos. Monte a query com Upper nos dois parâmetros ( JOÃO e JOAO ) e trabalhe com OR na query.
Isso deve funcionar independentemente da configuração do banco...
Responder

Gostei + 0

03/04/2015

Narba Silva

Desculpe a ignorancia talvez mais assim, como posso criar uma função que vai pegar uma palavra sem acento e acha-la com acento ?

Pois por exemplo a função troca áàãâ por a , agora como pesquisar joao e a função saber troca o a por ã e não por áàâ???


Se não tem exemplo ?


Pesquisei sobre Collate, mais dai teria que mexer no banco e não sei se compeça
Responder

Gostei + 0

03/04/2015

Marcos P

Você está confundindo as coisas...

Para a sua pesquisa, pelo q vc definiu no início do post, áãââá é igual a aaaaa, assim como joão é igual a joao.

Não se trata, portanto, de por acentos.... mas sim tirá-los.

Você deve pegar o código Delphi aí de cima e adaptá-lo para passar dois argumentos... o original e o sem acentos.

Vou tentar achar um micro aqui, para lhe passar um exemplo....
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar