Curso de dbExpress e DataSnap - ParteXII

Veja o neste artigo de Guinther Pauli, mais um capítulo do curso sobre dbExpress e DataSnap.

Curso de dbExpress e DataSnap

Parte XII – ClientDataSet e XML

 

Neste artigo veremos alguns interessantes recursos do ClientDataSet para suporte a XML. Através de uma aplicação dbExpress típica, vamos salvar os dados obtidos em XML para o disco, ler, examinar a estrutura do DataPacket e o XML em memória.

O suporte a XML não se restringe simplesmente ao salvamento dos dados para o disco em um formato estruturado. A Borland inclui essa funcionalidade no componente para que possamos facilmente trafegar DataSets pela Web em formato XML, usando o SOAP (Simple Object Access Protocol).

Configure uma conexão dbExpress para o banco EMPLOYEE do Interbase. Coloque um SQLConnection apontando para essa conexão. Coloque também duas SQLQuery, um DataSetProvider, um ClientDataSet, dois DataSources, um DBGrid, quatro Buttons, um DBNavigator, um Memo e um TWebBrowser (paleta Internet).

Relacione os componentes conforme mostrado a seguir:

 

object SQLConnection1: TSQLConnection

end

 

object SQLQuery1: TSQLQuery

  SQLConnection = SQLConnection1

End

 

object SQLQuery1: TSQLQuery

  SQLConnection = SQLConnection1

End

 

object DataSetProvider1: TDataSetProvider

  DataSet = SQLQuery1

End

 

object DBGrid1: TDBGrid

  DataSource = DataSource2

End

 

object DBNavigator1: TDBNavigator

  DataSource = DataSource2

End

 

object ClientDataSet1: TClientDataSet

  ProviderName = 'DataSetProvider1'

End

 

A instrução SQL da SQLQuery1 é mostrada a seguir:

 

select * from EMPLOYEE

 

Seu formulário deve estar semelhante ao mostrado a seguir:

 

Figura 1.

 

O código do botão Open é mostrado a seguir:

 

procedure TForm1.btnOpenClick(Sender: TObject);

begin

  ClientDataSet1.Open;

end;

 

O código do botão Save XML é mostrado a seguir:

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  ClientDataSet1.SaveToFile('c:\Employee.xml');

  WebBrowser1.Navigate('file:///c:\Employee.xml');

end;

 

O código do botão Load XML é mostrado a seguir:

 

procedure TForm1.Button3Click(Sender: TObject);

begin

  ClientDataSet1.LoadFromFile('c:\Employee.xml');

end;

 

O código do botão XML Data é mostrado a seguir:

 

procedure TForm1.Button4Click(Sender: TObject);

begin

  Memo1.Lines.Text := ClientDataSet1.XMLData;

end;

 

Execute a aplicação e clique nos botões Open, Save XML e XML Data. Observe o resultado na figura a seguir:

 

Figura 2.

A propriedade XMLData, somente-leitura, permite o acesso as dados em XML do ClientDataSet sem a necessidade de salvamento no disco, ideal para por exemplo trafegarmos informações via Web Services / SOAP.

O método SaveToFile salva o DataPacket para o disco. Usamos um WebBrowser para exibir o XML dentro do form, através de um plugin do Internet Explorer usado pelo componente. Observe que você pode expandir e reduzir nodes. Também é possível fazer isso no browser, claro:

 

Figura 3.

Inclua, exclua, altere alguns registros no DBGrid e salve novamente o XML. Abra o arquivo para examinarmos seu formato.

 

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

- <DATAPACKET Version="2.0">

- <METADATA>

- <FIELDS>

  <FIELD attrname="EMP_NO" fieldtype="i2" required="true" />

  <FIELD attrname="FIRST_NAME" fieldtype="string" required="true" WIDTH="15" />

  <FIELD attrname="LAST_NAME" fieldtype="string" required="true" WIDTH="20" />

  <FIELD attrname="PHONE_EXT" fieldtype="string" WIDTH="4" />

  <FIELD attrname="HIRE_DATE" fieldtype="SQLdateTime" required="true" />

  <FIELD attrname="DEPT_NO" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="3" />

  <FIELD attrname="JOB_CODE" fieldtype="string" required="true" WIDTH="5" />

  <FIELD attrname="JOB_GRADE" fieldtype="i2" required="true" />

  <FIELD attrname="JOB_COUNTRY" fieldtype="string" required="true" WIDTH="15" />

  <FIELD attrname="SALARY" fieldtype="fixedFMT" required="true" DECIMALS="2" WIDTH="15" />

  <FIELD attrname="FULL_NAME" fieldtype="string" WIDTH="37" />

  FIELDS>

  <PARAMS LCID="0" />

  METADATA>

- <ROWDATA>

  <ROW EMP_NO="2" FIRST_NAME="Guinther" LAST_NAME="Nelson" PHONE_EXT="250" HIRE_DATE="19881228" DEPT_NO="600" JOB_CODE="VP" JOB_GRADE="2" JOB_COUNTRY="USA" SALARY="105900.00" FULL_NAME="Nelson, Guinther" />

  <ROW EMP_NO="4" FIRST_NAME="Bruce" LAST_NAME="Young" PHONE_EXT="233" HIRE_DATE="19881228" DEPT_NO="621" JOB_CODE="Eng" JOB_GRADE="2" JOB_COUNTRY="USA" SALARY="97500.00" FULL_NAME="Young, Bruce" />

  <ROW EMP_NO="5" FIRST_NAME="Kim" LAST_NAME="Lambert" PHONE_EXT="22" HIRE_DATE="19890206" DEPT_NO="130" JOB_CODE="Eng" JOB_GRADE="2" JOB_COUNTRY="USA" SALARY="102750.00" FULL_NAME="Lambert, Kim" />

   ... demais registros omitidos

  ROWDATA>

  DATAPACKET>

 

Um DataPacket contém duas seções principais: MetaData e RowData. Na seção MetaData temos informações que definem os campos do DataSet (Fields) e também os parâmetros extras que incluímos no DataPacket (Params). Em RowData temos informações sobre os registros, inclusive que foram modificados.

Finalmente, execute a aplicação e carregue o DataSet sem efetuar a consulta ao BD, clicando em Load XML:

 

Figura 4.

Lembre-se que muitas operações podem ser realizadas em tempo de design, clicando-se de direita sobre o ClientDataSet:

 

Figura 5.

Uma última dica é que você pode “roubar” dados de qualquer tipo de DataSet em designtime e jogar na memória do ClientDataSet. Por exemplo, coloque uma Table do BDE apontando para DBDemos>Employee.DB. Coloque um ClientDataSet, dê um clique de direita sobre ele escolha a opção Assign Local Data:

 

Figura 6.

 

Figura 7.

Observe que os dados foram colocados no Data do CDS (veja o arquivo DFM abaixo):

 

Figura 8.


Agora você pode acessar os menus de contexto e salvar para XML fácil e rapidamente. Ideal para extrair dados de qualquer banco e salvar rapidamente em XML.

 

Download

Você pode fazer download de todos os exemplos deste curso a partir do endereço http://cc.borland.com/Author.aspx?ID=222668. É preciso fazer o cadastro na BDN, que é gratuito e pode ser feito a partir do endereço http://bdn.borland.com

 

dbExpress, DataSnap e ClientDataSet: Técnicas Avançadas

Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+). Para mais informações, consulte o link http://www.clubedelphi.net/guinther

 

 

Leia todos artigos da série

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

Artigos relacionados