ClientDataSet Gerando Tabela Temporária em Memória

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.

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.

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.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados