estou falando do Delphi claro, vm nos proporcionando a cada ano de sua vida (e olha que ainda uma criana de apenas 10 anos). Hoje vou falar do ClientDataSet, nos ajudando a criar uma tabela temporria em memria, para inclumos registros temporrios, 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 temporrios em memria que vou falar. Quem nunca usou TRxMemoryData do RXLIB, que manipulvamos registros em memria com ele e depois salvvamos em banco? Como por ex: gerar parcelas a receber na nota de sada, dar manuteno em datas de vencimento, valores e ai sim, salvar no banco de dados.
Criando um novo Projeto File->New->Application, insira no Formulrio, um TClientDataSet e renomeo 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, ento ser aberto o editor para criar novo TField como a Figura 1.2. Em seguida insira os TFields com as informaes 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 atribudo configuraes para as propriedades como: DisplayFormat, DefaultExpression, Required entre outros etc..
Listagem 1. Boto [Abir] Criar a tabela temporria em memria em seguida abre, para que possa ser usada.
procedure TForm1.btnAbrirClick(Sender: TObject); begin // Cria tabela temporria na memria. CDS.CreateDataSet; // Abre a tabela depois de criada. CDS.Open; end;
Listagem 2. Boto [Fechar] Fechar a tabela temporria da memria, consequentemente se os dados digitados no forem salvos, sero perdidos.
procedure TForm1.btnFecharClick(Sender: TObject); begin // Fecha a tabela temporria da memria. CDS.Close; end;
Listagem 4. Boto [Clonar Registro] Insere um novo registro na tabela temporria, clone do registro atual.
procedure TForm1.btnClonarClick(Sender: TObject); var varCdsClone: TClientDataSet; varI: Integer; begin // Cria uma variavl de tabela temporria na memria, // para receber os dados do registro a ser clonado. varCdsClone := TClientDataSet.Create(self); try // Clona o registro para a varivel 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 no 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 temporria que foi clonada. Cds.Fields[varI].Value := varCdsClone.FieldByName(Cds.Fields[varI].FieldName).Value; end; finally // Fecha a tabela temporria clonada. varCdsClone.Close; // Libera a var da tabela temporria clonada da memria. varCdsClone.Free; end; end;
procedure TForm1.btnSalvarClick(Sender: TObject); begin // Salva os registro na tabela temporria na memria para o disco. Cds.SaveToFile(Cds_Temp.xml); end;
Listagem 6. Boto [Carregar do Disco] Carrega os dados em arquivo para a tabela temporria.
Listagem 7. Boto [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. Boto [Ativar Log] Ativa o recurso de log das alteraes feitas nos dados. Veja na Figura 2.
- <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 alterao) <ROW RowState="9" ID="1" NOME="VOCES" VALOR="6.00" /> (2 alterao) <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. Boto [Desativar Log] Desativar recurso de log das alteraes feitas nos dados..