filtrar registros sem fazer nova consulta ao banco

Delphi

22/01/2008

bom dia a todos.
bem eu tenho um dbgrid e um edit para filtrar, inicialmente eu tinha um botão e no onclick fazia um select assim:
´select * from tabtal where upper(nome) like upper(´ + #39 + ´¬´ + edit_NomeCliente.Text + ´¬´ + 39 + ´) order by nome´;

funciona, mas o que eu quero é não ter que fazer outra pesquisa no banco diminuindo a performance, um colega disse pra eu usar locate.
CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[loCaseInsensitive]);

esse código aí não faz nada, pois eu quero que a medida que o usuario vai digitando as letras os nomes vão sendo filtrados no grid.
vlw!


Etspaz

Etspaz

Curtidas 0

Respostas

Paullsoftware

Paullsoftware

22/01/2008

bom dia a todos. bem eu tenho um dbgrid e um edit para filtrar, inicialmente eu tinha um botão e no onclick fazia um select assim: ´select * from tabtal where upper(nome) like upper(´ + #39 + ´¬´ + edit_NomeCliente.Text + ´¬´ + 39 + ´) order by nome´; funciona, mas o que eu quero é não ter que fazer outra pesquisa no banco diminuindo a performance, um colega disse pra eu usar locate. CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[loCaseInsensitive]); esse código aí não faz nada, pois eu quero que a medida que o usuario vai digitando as letras os nomes vão sendo filtrados no grid. vlw!

Creio que se você mudar loCaseInsensitive
CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[loCaseInsensitive]);
por loPartialKey
assim:
CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[loPartialKey]);
vai resolver :wink:


GOSTEI 0
Asales

Asales

22/01/2008

Você também pode utilizar desta forma:
CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[[b:e83311cd4f]loPartialKey, loCaseInsensitive[/b:e83311cd4f]]);

Assim, além dele pesquisar por parte da palavra, a consulta não vai diferenciar letras maiúsculas de minúsculas.


GOSTEI 0
Etspaz

Etspaz

22/01/2008

Paullsftware, primeiro obrigado por me atender.
realmente deu certo, mas agora eu quero saber se tem como fazer os outros registros que não satisfaçam o que está sendo digitatado sumam e fiquem somente os que forem encontrados com o locate, pelo que vi ele para o ponteiro no registro encontrado apenas.
e quando fossem sendo apagadas as letras fossem voltando de acordo com o que estiver no edit, a medida que se deixar o edit vazio volte a exibir todos os registros, como no help de alguns programas.


GOSTEI 0
Etspaz

Etspaz

22/01/2008

Você também pode utilizar desta forma: CDS_CONTATO.Locate(´NOME´,Edit_filtranome_contato.Text,[loPartialKey, loCaseInsensitive]);


vlw asales, vou usar também o loCaseInsensitive.


GOSTEI 0
Ara.es

Ara.es

22/01/2008

o locate localiza um registro, para filtrar use o filter.

vc pode fazer assim:

ClientDataset.Filtered := False;
ClientDataset.Filter     := ´campo = 1´;
ClientDataset.Filtered := True;



GOSTEI 0
Etspaz

Etspaz

22/01/2008

a dica do ara.es serviu certinho , na verdade era que não estava sabendo perguntar.
eu fiz assim:

 cds_contato.Filtered := False;
  cds_contato.Filter     := ´nome like ´ + #39 + ´¬´ +    Edit_filtranome_contato.Text + ´¬´ + 39 ;
  cds_contato.Filtered := True;
 


obrigado a todos!


GOSTEI 0
Etspaz

Etspaz

22/01/2008

a dica do ara.es serviu certinho , na verdade era eu que não estava sabendo perguntar.
eu fiz assim:

 cds_contato.Filtered := False;
  cds_contato.Filter     := ´nome like ´ + #39 + ´¬´ +    Edit_filtranome_contato.Text + ´¬´ + 39 ;
  cds_contato.Filtered := True;
 


obrigado a todos!


GOSTEI 0
POSTAR