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.
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.
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
procedure TForm1.btnAbrirClick(Sender: TObject);
begin
// Cria tabela temporária na memória.
CDS.CreateDataSet;
// Abre a tabela depois de criada.
CDS.Open;
end;
procedure TForm1.btnFecharClick(Sender: TObject);
begin
// Fecha a tabela temporária da memória.
CDS.Close;
end
procedure TForm1.btnLimparClick(Sender: TObject);
begin
// Apaga todos os registros da tabela temporária na memória.
Cds.EmptyDataSet;
end;
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;
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;
procedure TForm1.btnCarregarClick(Sender: TObject);
begin
// Carrega o arquivo .XML, para memória.
Cds.LoadFromFile(Cds_Temp.xml);
end;
procedure TForm1.btnIndiceClick(Sender: TObject);
begin
// Cria o índice pelo campo NOME.
Cds.IndexFieldNames := NOME;
end;
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.
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.