Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Consulta delphi operador LIKE ou FILTER


Posts recomendados

Opa, eai pessoal!

Tô tendo uns problemas com minha aplicação.

 

Não estou conseguindo aplicar SQL abaixo na query da minha aplicação delphi.

 

Quando rodo "SELECT * FROM BANCODEDADOS WHERE PROBLEMA LIKE '%casa%' AND PROBLEMA LIKE '%amarela%' " no SQL Server, o resultado é o esperado:

mostra todos resultados que contenham ambas as palavras, independente da ordem que as escrevo, ou seja: 

TABELA: BANCODEDADOS

CAMPO: |PROBLEMA  |

               |casa amarela| VALORES  

               |amarela casa| VALORES

 

o problema é que não estou conseguindo fazer o mesmo no delphi ao digitar os valores em um edit (fedit_pesquisar)

Evento on change:

 

dm_egestor.adoquery_egestor.Close;
dm_egestor.adoquery_egestor.SQL.Clear;
dm_egestor.adoquery_egestor.SQL.Add('SELECT * FROM BANCODEDADOS WHERE PROBLEMA LIKE '+ QuotedStr('%'+fedit_pesquisar.Text+'%')+' AND PROBLEMA LIKE '+ QuotedStr('%'+fedit_pesquisar.Text+'%')+'');
dm_egestor.adoquery_egestor.Open;

 

O resultado no meu dbgrid deveria ser todos os resultados que contenha as palavras digitadas pelo usuário no edit, independente da ordem. 

 

Fiz utilizando o FILTER também (porém sem sucesso):

//if fedit_pesquisar.Text = '' then
    //dm_egestor.adoquery_egestor.Filtered := False
  //else begin
    //dm_egestor.adoquery_egestor.Filter := 'PROBLEMA LIKE ' + QuotedStr('*'+ fedit_pesquisar.Text +'*') + ' AND ' + 'PROBLEMA LIKE ' + QuotedStr('*'+ fedit_pesquisar.Text +'*');
   //dm_egestor.adoquery_egestor.Filtered := True;
    //end;

 

 

 

Link para o comentário
Compartilhar em outros sites

Resolvido!!!

Pesquisa dinâmica em Delphi com 3 Edits, dbGrid, adotable e banco Acess, utilizando operador LIKE. 

 

para quem interessar segue os códigos:

procedure Tfrm_consulta.fcbox_categoriaChange(Sender: TObject);
var
cont: Integer;
Filtro,
Soma_Filtro: String;

begin
  Filtro := '';
  Soma_Filtro := '';
  cont := 0;

  //no evento onChange do edit1 (fcbox_categoria)
  //para os demais edits inverter a ordem do if: começa essa linha por edit2 (fedit_autor) e assim sucessivamente
  if (fcbox_categoria.Text <> '') then
  begin
  cont := cont + 1;
  if cont = 1 then
  begin
  Filtro := ' CATEGORIA LIKE '+ QuotedStr('%'+fcbox_categoria.Text+'%');
  Soma_Filtro := Soma_filtro + Filtro;
  end else
  begin
  Filtro := ' AND CATEGORIA LIKE '+ QuotedStr('%'+fcbox_categoria.Text+'%');
  Soma_Filtro := Soma_Filtro + Filtro;
  end;
  end;

  begin
  if (fedit_autor.Text <> '') then
  begin
  cont := cont + 1;
  if cont = 1 then
  begin
  Filtro := ' AUTOR LIKE '+ QuotedStr('%'+fedit_autor.Text+'%');
  Soma_Filtro := Soma_Filtro + Filtro;
  end else
  begin
  Filtro := ' AND AUTOR LIKE '+ QuotedStr('%'+fedit_autor.Text+'%');
  Soma_Filtro := Soma_Filtro + Filtro;
  end;
  end;

  begin
  if (fedit_pesquisar.Text <> '') then
  begin
  cont := cont + 1;
  if cont = 1 then
  begin
  Filtro := ' PROBLEMA LIKE '+ QuotedStr('%'+fedit_pesquisar.Text+'%');
  Soma_Filtro := Soma_Filtro + Filtro;
  end else
  begin
  Filtro := ' AND PROBLEMA LIKE '+ QuotedStr('%'+fedit_pesquisar.Text+'%');
  Soma_Filtro := Soma_Filtro + Filtro;
  end;
  end;

  dm_egestor.adotable_bancodedados.Filter := Soma_Filtro;
  end;
  end;

end;
end.

(a pesquisa é construída a medida que o usuário for preenchendo. Permite pesquisar em 1 ou N edits)

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...