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
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" />
< FONT>FIELDS>
<PARAMS LCID="0" />
< FONT>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
< FONT>ROWDATA>
< FONT>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
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
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX
- Curso de dbExpress e DataSnap - Parte XXX
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo