Olá galera, nesta Quick Tips irei mostrar como usar dois recursos que temos no ClientDataSet para localizar e Filtrar registros no mesmo:

Vamos a construção do Exemplo:

Adicione:

  • 1 ClientDataset, CDSPadrao ( Construí um XML, porém nada lhe impede de usar uma base própria )
  • 1 DataSource, DSPadrao
  • 1 DBGrid
  • 1 DBNavigator
  • 1 Edit EdtConteudo
  • 1 BitBtn, BtnLocalizar
  • 1 CheckBox, CbxFiltrar
tela

procedure TFrmPrincipal.BtnLocalizarClick(Sender: TObject);
 begin
   if CDSPadrao.Locate('Nome',EdtConteudo.Text,[loCaseInsensitive,loPartialKey]) then
   begin
     ShowMessage('Registro encontrado ' + #13 +
                 'Codigo : ' + CDSPadraoID.AsString + #13 +
                 'Nome   : ' + CDSPadraoNome.AsString);
   end
   else
   begin
     ShowMessage('Registro não encontrado!!!!');
     EdtConteudo.Clear;
     EdtConteudo.SetFocus;
   end;
 end;
  
 CbxFiltrar : onClick
  
 procedure TFrmPrincipal.CbxFiltrarClick(Sender: TObject);
 begin
   if TCheckBox(Sender).Checked then
//Usando Cast onde sei que o Objeto Sender é um TCheckBox,
//para verificar se o mesmo esta marcado
   begin
     with CDSPadrao do
     begin
       Close;
       Filtered := False;
       Filter := 'UPPER(Nome) Like ' +UpperCase(QuotedStr('%' + EdtConteudo.Text + '%'));     
 //Funciona como uma Clausula Where do SQL
       Filtered := True;
      Open;
     end;
   end
   else
   begin
     CDSPadrao.Filtered := False;
     EdtConteudo.Clear;
     EdtConteudo.SetFocus;
   end;
 end;

O ClientDataSet, é um dos componentes mais poderosos que temos no Delphi, com eles trabalhamos em memória e usando o Filter e Locate, recuperarmos dados muitos mais rápidos do que se fizéssemos uma Query para representar estas funções que encontramos nele, pois como falei os dados estão na memória.

Fico por aqui e até a próxima Quick Tips.