Filtro de Pesquisa Firebird + DelphiXE3+ Zeos

Delphi

30/07/2014

Pessoal, eu estou tendo dificuldades para editar um filtro de pesquisa.
O objetivo é o usuário digitar um nome, e ele trazer do banco de dados o resultado.
Com números está funcionando. Mas com nomes não, está dando um erro de sintaxe.
Então, logicamente estou errando no codigo.
Para esse filtro usei um edit um botao e um DbGrid
o usuario digita o nome, e no DbGrida fica apenas os valores referentes ao digitado.
Estou utilizando o Zeos. O Banco é o Firebird 2.5.
Como fazer com que se eu digitar um nome fazer a consulta e trazer apenas os valores escritos no Edit?
Renato Sanches

Renato Sanches

Curtidas 0

Melhor post

Renato Rubinho

Renato Rubinho

01/08/2014

Buenos,

Tem que colocar um espaço antes e depois do 'like', senão concatena com o nome do campo e o símbolo para o like é '%' ao invés de '*'.

Isso deve funcionar.

ds.DataSet.Filter := CampoFiltro + ' like ' + QuotedStr( '%' + edtFiltro.Text + '%');


Abraççç,
Renato
GOSTEI 1

Mais Respostas

Renato Rubinho

Renato Rubinho

30/07/2014

Buenas,

Posta o trecho do código que está usando para o filtro.
Mas uma idéia é que se funciona para números e não para texto, pode estar faltando colocar aspas no texto antes de mandar para o banco.

sql.add('SELECT * FROM ENREDECOS');

errado
sql.add('WHERE LOGRADOURO = ' + Edit1.text);

certo
sql.add('WHERE LOGRADOURO = ' + QuotedStr(Edit1.text));


Abraççç,
Renato
GOSTEI 0
Renato Sanches

Renato Sanches

30/07/2014

procedure TfrmModeloLista.btnFiltroClick(Sender: TObject);
begin
if ds.DataSet.FieldByName(CampoFiltro) is TWideStringField then
begin
ds.DataSet.Filter := CampoFiltro + 'like' + QuotedStr( '*' + edtFiltro.Text + '*');
end
else
begin
ds.DataSet.Filter := CampoFiltro +'='+ edtFiltro.Text;
end;
ds.DataSet.Filtered := True;
end;

Foi assim que consegui fazer funcionar com numeros eu nao estou usando o zQuery.
GOSTEI 0
Renato Sanches

Renato Sanches

30/07/2014

Agora funcionou. Obrigado pela ajuda!
GOSTEI 0
POSTAR