Olá pessoal, nesta quickTip mostraremos como persistir dados em um XML a partir de um clientDataSet.

Podem haver momento em que desejamos persistir dados porém não é necessário armazenar os mesmos em banco. Uma saída é trabalhar com arquivos XML, e uma alternativa muito produtiva para isso é o uso de ClientDataSets.

Primeiramente, vamos inserir na tela um DBGrid, um DataSource e um ClientDataSet e fazer as ligações tradicionais:

  • DataSource -> ClientDataSet
  • DBGrid -> DataSource

Feito isso, clique duas vezes no ClientDataSet para abrir a sessão de fields, depois clique com o botão direito e em seguida “New Field”. Vamos criar os campos no CDS e carregar na grid para que fique de forma semelhante ao mostrado na figura abaixo:

campos no CDS

Como vocês já devem saber, o clientDataSet armazena seus dados na memória, o que faremos é persistir estes dados em um arquivo XML.

Primeiramente, no create do formulário, temos que executar o comando CreateDataSet, para que o clientDataSet monte sua estrutura em memória com os campos que criamos, logo após vamos dar um open no clientDataSet:


procedure TForm1.FormCreate(Sender: TObject);
begin
	ClientDataSet1.CreateDataSet;
	ClientDataSet1.Open;
end;
end.

Para gravarmos os dados no XML, vamos alterar a propriedade FileName do ClientDataSet para “C:\Clientes.xml” e inserir o código abaixo no evento AfterPost e AfterDelete do ClientDataSet:


procedure TForm1.ClientDataSet1AfterPost(DataSet:TDataSet);
begin
	ClientDataSet1.SaveToFile(ClientDataSet1.FileName,dfXML);
end;

procedure TForm1.ClientDataSet1BeforeDelete(DataSet:TDataSet);
begin
	ClientDataSet1.SaveToFile(ClientDataSet1.FileName,dfXML);
end;

Estas linhas farão com que os dados sejam gravados no arquivo XML toda vez que for feita uma inclusão, alteração ou exclusão de um registro.

Para completar nosso exemplo, precisamos carregar os dados ao iniciar a aplicação, para isso adicione o comando LoadFromFile no evento onCreate do form para que fique da seguinte forma:


procedure TForm1.FormCreate(Sender:TObject);
begin
	ClientDataSet1.CreateDataSet;
	ClientDataSet1.Open;
	ClientDataSet1.LoadFromFile(ClientDataSet1.FileName);
end;