ClientDataSet Gerando Tabela Temporária em Memória

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (14)  (1)

Veja com Isaque Pinheiro uma das mil e uma utilidades do componente TClientDataset.

Hello amigos Delphianos, neste artigo gostaria de passar alguns dos recursos, que está SUPER ferramenta de desenvolvimento, estou falando do Delphi é claro, vêm nos proporcionando a cada ano de sua vida (e olha que ainda é uma criança de apenas 10 anos). Hoje vou falar do ClientDataSet, nos ajudando a criar uma tabela temporária em memória, para incluímos registros temporários, e depois fazermos o que quisermos com eles, gravar em banco de dados em arquivo em disco e etc...

 

            Podemos comparar o ClientDataSet, com Bom Bril (mil e uma utilidades), este poderoso componente nos permite diversas coisas em se tratando de dados, e é sobre dados temporários em memória que vou falar. Quem nunca usou TRxMemoryData do RXLIB, que manipulávamos registros em memória com ele e depois salvávamos em banco? Como por ex: gerar parcelas a receber na nota de saída, dar manutenção em datas de vencimento, valores e ai sim, salvar no banco de dados.

 

    Bom vamos ao que interessa:

 

Criando um novo Projeto

File->New->Application, insira no Formulário, um TClientDataSet e renome-o para CDS, insira um TDataSource e renome-o para DS e mude seu DataSet para CDS, insira um TDBGrid e mude seu DataSource para DS, insira um TDBNavigator e mude seu DataSource para DS, e por último insira nove TButtons e mude seus captions como visto na Figura 1.

 imagem_1.JPG

Figura 1. Formulário da aplicação.

 

Criando Estrutura

Vamos criar agora a estrutura de nossa tabela. Dê dois clique sobre o CDS e vamos inserir os TFields referente os campos que queremos em nossa estrutura Figura 1.1.

imagem_2.JPG                imagem_3.JPG
Figura 1.1. Editor de Campos               Figura 1.2. Editor para criar novo TField.

Pressione a tecla [INS] no Editor de Campos, então será aberto o editor para criar novo TField como a Figura 1.2. Em seguida insira os TFields com as informações que segue abaixo:

 

Name = ID , Type = Integer, Field type = Data;

Name = NOME, Type = String, Size = 40, Field type = Data;

Name = VALOR, Type = BCD, Size = 2, Field type = Data;

 

Nota: Nos TFields criado, pode e acho que deve, ser atribuído configurações para as propriedades como: DisplayFormat, DefaultExpression, Required entre outros etc..

 

 

Criando os Eventos dos Buttons

 

Listagem 1. Botão [Abir] – Criar a tabela temporária em memória em seguida abre, para que possa ser usada.

 

procedure TForm1.btnAbrirClick(Sender: TObject);

begin

   // Cria tabela temporária na memória.

   CDS.CreateDataSet;

   // Abre a tabela depois de criada.

   CDS.Open;

end;

 

Listagem 2. Botão [Fechar] – Fechar a tabela temporária da memória, consequentemente se os dados digitados não forem salvos, serão perdidos.

 

procedure TForm1.btnFecharClick(Sender: TObject);

begin

   // Fecha a tabela temporária da memória.

   CDS.Close;

end;

 

Listagem 3. Botão [Limpar Tabela] – Limpa todos os registros da tabela temporária.

 

procedure TForm1.btnLimparClick(Sender: TObject);

begin

   // Apaga todos os registros da tabela temporária na memória.

   Cds.EmptyDataSet;

end;

 

Listagem 4. Botão [Clonar Registro] – Insere um novo registro na tabela temporária, clone do registro atual.

 

procedure TForm1.btnClonarClick(Sender: TObject);

var

varCdsClone: TClientDataSet;

varI: Integer;

begin

  // Cria uma variavél de tabela temporária na memória,

  // para receber os dados do registro a ser clonado.

  varCdsClone := TClientDataSet.Create(self);

  try

    // Clona o registro para a variével criada acima.

    varCdsClone.CloneCursor(TClientDataSet(Cds),True);

    // Insere o novo registro na sua tabela original.

    Cds.Append;

    // Faz um loop para processar todos os campos da sua tabela original.

    for varI := 0 to Cds.FieldCount -1 do

    begin

       // Verifica se o tipo do campo é do tipo data, para que não pegue valores

       // de campos do tipo calculado.

       if (Cds.Fields[varI].FieldKind = fkData) then

          // Diz que o campo de sua tabela original, vai receber o campo da

          // tabela temporária que foi clonada.

          Cds.Fields[varI].Value := varCdsClone.FieldByName(Cds.Fields[varI].FieldName).Value;

    end;

  finally

    // Fecha a tabela temporária clonada.

    varCdsClone.Close;

    // Libera a var da tabela temporária clonada da memória.

    varCdsClone.Free;

  end;

end;

 

Listagem 5. Botão [Salvar em Disco] – Salva os dados da tabela temporária em arquivo.

 

procedure TForm1.btnSalvarClick(Sender: TObject);

begin

   // Salva os registro na tabela temporária na memória para o disco.

   Cds.SaveToFile(Cds_Temp.xml);

end;

 

Listagem 6. Botão [Carregar do Disco] – Carrega os dados em arquivo para a tabela temporária.

 

procedure TForm1.btnCarregarClick(Sender: TObject);

begin

  // Carrega o arquivo .XML, para memória.

  Cds.LoadFromFile(Cds_Temp.xml);

end;

 

Listagem 7. Botão [Criar Índice Nome] – Cria um índice pelo campo selecionado, e em seguida ordena os dados.

 

procedure TForm1.btnIndiceClick(Sender: TObject);

begin

   // Cria o índice pelo campo NOME.

   Cds.IndexFieldNames := NOME;

end;

 

Listagem 8. Botão [Ativar Log] – Ativa o recurso de log das alterações feitas nos dados. Veja na Figura 2.

 

procedure TForm1.btnAtivarLogClick(Sender: TObject);

begin

   // Ativa o log.

   CDS.LogChanges := True;

end;

 

<?xml version="1.0" standalone="yes" ?>

- <DATAPACKET Version="2.0">

- <METADATA>

- <FIELDS>

  <FIELD attrname="ID" fieldtype="i4" />

  <FIELD attrname="NOME" fieldtype="string" WIDTH="40" />

  <FIELD attrname="VALOR" fieldtype="fixed" DECIMALS="2" WIDTH="32" />

  </FIELDS>

  <PARAMS CHANGE_LOG="7 6 8 8 7 8" /> (Log Ativado)

  </METADATA>

- <ROWDATA>

  <ROW ID="1" NOME="EU" VALOR="1.00" />

  <ROW ID="1" NOME="NOS" VALOR="2.00" />

  <ROW ID="1" NOME="VAMOS" VALOR="3.00" />

  <ROW ID="1" NOME="SOMOS" VALOR="4.00" />

  <ROW ID="1" NOME="FICAMOS" VALOR="5.00" />

  <ROW RowState="1" ID="1" NOME="VOCES" VALOR="7.00" />  (1ª alteração)

  <ROW RowState="9" ID="1" NOME="VOCES" VALOR="6.00" />  (2ª alteração)

  <ROW RowState="8" ID="1" NOME="VOCES" VALOR="10.00" />  (registro atual)

  </ROWDATA>

  </DATAPACKET>

Figura 2. Exemplo do arquivo XML salvo com o recurso de log.

 

 

Listagem 9. Botão [Desativar Log] – Desativar recurso de log das alterações feitas nos dados..

 

procedure TForm1.btnDesativarLogClick(Sender: TObject);

begin

   // Desativar Log.

   CDS.LogChanges := False;

end;

 

 

Conclusão

Neste artigo vimos como criar tabelas temporárias em memória, podendo até salvar os dados depois em disco. Vimos aqui também mais um poder da super criança de 10 aninhos, o qual espero que seja uma criança de sucesso no futuro, pois o futuro dos Delphianos também depende do dele. É isso ai espero que este, seja útil para algum de vocês. Abraços e até o próximo artigo.

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?