Filtro não funciona no sqlServer 2008
Uns dias atrás postei aqui no fórum uma dúvida referente a um filtro de pesquisa, e seguindo a dica funcionou corretamente. Estou desenvolvendo outra aplicação mas o Banco de Dados é o SqlServer 2008 e pensei em usar o mesmo filtro dada a sua grande funcionalidade. Mas está dando erro de novo e gostaria de novamente pedir ajudar
segue o código:
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;
ele retorna o seguinte erro:
os argumentos sao incorretos, estão fora do intervalo aceitável ou estão em conflito
se eu pesquipo pelo codigo a pesquisa corre tudo bem, mas quando poe letras, numa pesquisa por nome por exemplo dá esse erro. O que estou errando?
segue o código:
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;
ele retorna o seguinte erro:
os argumentos sao incorretos, estão fora do intervalo aceitável ou estão em conflito
se eu pesquipo pelo codigo a pesquisa corre tudo bem, mas quando poe letras, numa pesquisa por nome por exemplo dá esse erro. O que estou errando?
Renato Sanches
Curtidas 0
Respostas
Alisson Santos
10/09/2014
O seu campo filtro qual é o que está verificando?
Pelo que pude entender está fazendo um like em um campo int e passando string para ele.
Pelo que pude entender está fazendo um like em um campo int e passando string para ele.
GOSTEI 0
Renato Sanches
10/09/2014
O filtro ele faz busca por número, que é o código do cliente, e deveria fazer por nome. É possível que seja isso mesmo que você disse, o que não entendo é que ele funcionava muito bem em outra aplicação, que utilizava o firebird, mas quando utilizo a mesma regra no filtro no sqlserver não funciona.
GOSTEI 0
Marcos P
10/09/2014
Quem retorna o erro, o Delphi ou o Sql Server ?
Se for o Sql Server, você poderia colocar um exemplo de uma query final, passada ao banco, quando o erro ocorre ?
Se for o Sql Server, você poderia colocar um exemplo de uma query final, passada ao banco, quando o erro ocorre ?
GOSTEI 0
Renato Sanches
10/09/2014
Quem retorna o erro é o delphi
GOSTEI 0
William
10/09/2014
Tente assim, substituindo '*' por '%':
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;
GOSTEI 0
Marcos P
10/09/2014
A query roda direto no banco ?
Coloca aqui um exemplo de uma query final, passada ao banco, quando o erro ocorre ?
Coloca aqui um exemplo de uma query final, passada ao banco, quando o erro ocorre ?
GOSTEI 0
Renato Sanches
10/09/2014
Amigos procurei a resposta nesses dias sobre o problema do filtro. Encontrei a resposta posto aqui para que seja útil para outros também.
procedure TfrmModelodados.btnPesquisarClick(Sender: TObject);
begin
if ds.DataSet.FieldByName(CampoFiltro) is TStringField 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;
antes estava usando TWideStringField mudei para TSTringField assim o Filtro funcionou como era esperado.
obrigado pelas dicas.
procedure TfrmModelodados.btnPesquisarClick(Sender: TObject);
begin
if ds.DataSet.FieldByName(CampoFiltro) is TStringField 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;
antes estava usando TWideStringField mudei para TSTringField assim o Filtro funcionou como era esperado.
obrigado pelas dicas.
GOSTEI 0