Curso de dbExpress e DataSnap

Parte X – UpdateStatus

 

Este exemplo mostra como utilizar as propriedades UpdateStatus e UpdateFilter do ClientDataSet. Enquanto o State indica o estado de um DataSet inteiro, UpdateStatus representa o estado atual de um registro. StatusFilter permite exibir filtrar os registros de acordo com seu estado.

Inicie uma nova aplicação Delphi VCL e coloque no formulário principal um ComboBox e um ClientDataSet. Dê um clique de direita no ClientDataSet, escolha Load from MyBase Table e abra o arquivo Customer.XML, localizado nos demos do Delphi, por padrão no diretório:

 

C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data

 

Adicione os TFields no DataSet e adicione um campo calculado, chamado STATUS, conforme mostrado a seguir:

Archive10_1.gif 

Figura 1.

Arraste os campos para o formulário para criar os controles Data-Aware. Coloque também um DBNavigator apontando para o DataSource.

Seu formulário deve estar semelhante ao mostrado a seguir:

Archive10_2.gif 

Figura 2.

No OnCreate do form, digite:

 

uses TypInfo;

...

procedure TFrmMain.FormCreate(Sender: TObject);

var

  i : integer;

begin

  for i := 0 to 3 do

   ComboBox1.Items.Add(GetEnumName(TypeInfo(TUpdateStatus),I));

 ComboBox1.Items.Add('Todos');

end;

 

Isso preenche o Combo com os possíveis valores para a enumeração TUpdateStatus:

 

  TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);

  TUpdateStatusSet = set of TUpdateStatus;

Archive10_3.gif 

Figura 3.

No evento OnCalcFields digite:

 

procedure TFrmMain.ClientDataSet1CalcFields(DataSet: TDataSet);

begin

  ClientDataSet1STATUS.AsString :=

    GetEnumName(TypeInfo(TUpdateStatus),Integer(ClientDataSet1.UpdateStatus));

end;

 

Isso faz com que o campo STATUS indique o status atual do registro.

Quando o usuário selecione um Status na combo, vamos exibir somente os registros que estejam naquele estado (excluído, inserido, modificado etc.). Isso é feito no evento OnChange do Combo:

 

procedure TFrmMain.ComboBox1Change(Sender: TObject);

begin

  if ComboBox1.ItemIndex = 4 then

    ClientDataSet1.StatusFilter := []

  else

    ClientDataSet1.StatusFilter := [TUpdateStatus(ComboBox1.ItemIndex)];

end;

 

Execute a aplicação, insira, modifique e exclua alguns registros, e a seguir escolha o filtro.

Archive10_4.gif 

Figura 4.

 

Download

 

dbExpress, DataSnap e ClientDataSet: Técnicas Avançadas

Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+). Para mais informações, consulte o link http://www.clubedelphi.net/guinther

 

 

Leia todos artigos da série