O Filter é usado para especificar um filtro nos dados do clientdataset fazendo que o clientdataset exiba apenas os registros que atendem as condições. A propriedade Filter do Clientdataset recebe uma string que descreve a condição filtro. Está opção é bem parecida com as clausulas que inserimos para montar um “where” numa query SQL.

Imagine o seguinte conjunto de dados:

conjunto de dados
Figura 1 - Conjunto de dados

Dentre os recursos de Filtro no clietdataset temos:

recursos de filtros
Figura 2 - Recursos de filtros

Uma vez que o Clientdataset trabalha com os dados em memoria, podemos usar a propriedade Filter para exibir apenas os registros que desejar, fazendo um filtro mediante a uma clausula, como se fosse o "Where" de uma query SQL. A vantagem é que a aplicação não precisa fazer varias solicitações de pesquisa ao banco de dados, deixando assim sua aplicação bem mais rapida. No artigo anterior vimos que podemos colocar diversos tipos de clausulas diferentes no Filter do Clientdataset. Vamos ver nesta segunda parte do artigo como trabalhar com isso na pratica. Vamos lá...

Inicie o Delphi e abra um novo projeto: File > New > VLC Forms Application. Crie uma tela simples como mostra a figura abaixo:

Nova tela

No meu caso eu criei a seguinte tabela no SQLServer:

CREATE TABLE Inscricoes(
       ID int NOT NULL,
       Nome varchar(50) NOT NULL,
       Data_Inscr datetime NOT NULL,
       Estado varchar(50) NOT NULL,
       Pais varchar(50) NOT NULL
          )

Vamos agora realizar a preparação dos componentes de acesso a dados:

No Componente de TAdoquery coloque as seguintes propriedades:

  • Name = qryInscricoes
  • SQL = select * from Inscricoes
  • ConectionString = Provider=SQLOLEDB.1;Password=SuaSenha;Persist Security Info=True;User ID=SeuUsuario;Initial Catalog=NomeBanco;Data Source=NomeDoServidor;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096; Use Encryption for Data=False;Tag with column collation when possible=False
  • Loginprompt = false

No Componente de TDatasetProvider coloque as seguintes propriedades:

  • Name = dspInscricoes
  • Dataset = qryInscricoes

No Componente de TClientdataset coloque as seguintes propriedades:

  • Name = cdsInscricoes
  • Providername = dspInscricoes

No Componente de TDataSource coloque as seguintes propriedades:

  • Name = DTInscricoes
  • Dataset = cdsInscricoes

Com essa ligação entre os componentes, já podemos retornar os dados que estão na tabela para o clientdataset. Para Visualizar os registros do Clientdataset no TDBgrid, na propriedade DataSource indique o DSInscricoes.

No Evento OnShow Do Form insira o seguinte código:

procedure TForm1.FormShow(Sender: TObject);
begin
    //Irá abrir a conexão com o banco de dados, retornando os dados da tabela.
    cdsInscricoes.Open;
end;

No Evento OnClick do Botão Adicionar Filtro insira o seguinte código:

procedure TForm1. btAdicionarFiltroClick(Sender: TObject);
begin
    //Insere como filtro a clausula que esta no Edit
    cdsInscricoes.Filtered := false;
    cdsInscricoes.Filter := EditFiltro.Text;
    cdsInscricoes.Filtered := true;
end;

No Evento OnClick do Botão Remover Filtro insira o seguinte código:

procedure TForm1. btRemoverFiltroClick(Sender: TObject);
begin
    //Remove o Filtro e Exibe todos os registros que estão no clientdataset 
    cdsInscricoes.Filtered := false;
end;

Execute a aplicação, veja q ele irá aparecer no grid todos os registros que estão cadastros no banco, pois a propriedade Filtered do Clientdataset vem como padrão False. No codigo que está no clique do botão Adicionar Filtro, estamos passando o conteudo do EditFiltro para a propriedade Filter do Clientdataset. Ao mudar esta propriedade Filtered para True, o clietdataset irá filtrar os dados conforme a clausula que estiver na propriedade Filter.

propriedade filter
Figura 3 - Propriedade filter

Para remover o Filtro, no botão Remover Filtro estamos passando para a propriedade Filtered o valor False, fazendo que o Filter seja desconsiderado e volte ao seu estado original.

removendo filtro
Figura 4 - Removendo filter

Com isso você pode ir mudando o valor do EditFiltro, colocando clausulas que vimos no artigo anterior, e clicando no Adicionar Filtro.

Espero ter ajudado a todos.