Skip to content
mobius1qwe edited this page Oct 15, 2026 · 1 revision

Home > Storage XML

Storage XML

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Nível: iniciante

Em uma frase: o TRALStorageXMLLink leva datasets em XML - no formato do RAL ou nos formatos que o TClientDataSet, o ADO e o TBufDataset já entendem - no DBWare ou em qualquer lugar onde você precise de um dataset em XML.

Você vai precisar: o pacote RALModuleXMLPackage (Instalação).

No DBWare, sem código

  1. Coloque um TRALStorageXMLLink (paleta RAL - Storage) no formulário do cliente.
  2. Ligue Storage do memtable (TRALDBFDMemTable, TRALDBZMemTable, TRALDBBufDataset) a ele.
  3. Deixe XMLType em xtAuto. Pronto.

Com xtAuto o formato é escolhido sozinho, pelo dataset do cliente e pelo driver do servidor:

Cliente Servidor O que viaja
FireDAC (TRALDBFDMemTable) FireDAC o XML nativo do FireDAC, lido pelo próprio memtable
TRALDBBufDataset sqldb o XML nativo do TBufDataset
TRALDBBufDataset outro DataPacket
qualquer outro qualquer o XML do RAL (DBWare)

O servidor não precisa de nada: o TRALDBModule lê do pedido o storage que o cliente usa.

Os formatos

XMLType Raiz Para quem
xtDBWare <ralstorage> o formato do RAL: tipos, tamanhos e nulos exatos
xtRAW <dataset> (RootName) XML simples, um elemento por registro (RecordName) e um por campo; para outros sistemas
xtDataPacket <DATAPACKET> o do TClientDataSet (MIDAS) e do TBufDataset (DataPacketDialect)
xtADO <xml> com rs:data o do TADODataSet.SaveToFile(pfXML)

A leitura reconhece qualquer um dos quatro pela raiz, seja qual for o XMLType. No RAW sem tipos declarados, o tipo de cada campo é deduzido dos valores (xsi:type, quando vier, ganha).

Fora do DBWare

uses RALStorageXML;

Texto := Query1.ToXML(xtDataPacket);     // o dataset como XML
MemTable1.LoadFromXML(Texto);            // e de volta, qualquer formato

RALStorageXMLSave(Query1, Arquivo, xtADO);
RALStorageXMLLoad(MemTable1, Arquivo);

O link também tem DataSetToXML e XMLToDataSet.

Opções (FormatOptions)

Opção O que faz
Indent uma linha por elemento (padrão: compacto)
DateTimeIsUTC no DBWare e no RAW: True diz que as datas do dataset já estão em UTC e grava Z; o padrão grava a hora local com o fuso. DataPacket e ADO gravam sem fuso, como os componentes deles
RootName, RecordName nomes do RAW (padrão dataset e record)
DataPacketDialect dpdMidas (padrão) ou dpdFPC, o do TBufDataset; os dois são lidos

Decimais (NUMERIC, ftFMTBcd) viajam exatos, com ponto, em qualquer configuração regional; blobs em base64 (hex no ADO); campos com nome que não é nome XML (espaço, acento no começo) ganham um nome codificado e voltam iguais.

Veja também

Clone this wiki locally