Re: exportar a un XML

From: Rodolfo Burlando Makthon <rburlandom(at)ransa(dot)net>
To: "Diego Ayala" <netdiego81(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: exportar a un XML
Date: 2007-01-03 16:44:43
Message-ID: OF88349558.82EAC62E-ON05257258.005B5BA3-05257258.005BE720@gromero.com.pe
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Si en tu codigo en Delphi usas ClientDataset veras de que hay una
propiedad (XMLData) que te devuelve un String que es el XML que
posiblemente buscas.

Para cargar el Dataset en base a un XML:
miClientDataSet.XMLData:= cadenaXML;

para obtener un XML en base al contenido del Dataset:
cadenaXML:= miClientDataSet.XMLData;

en donde cadenaXML es un string y miClientDataSet es un TClientDataSet.

Saludos.

"Diego Ayala" <netdiego81(at)gmail(dot)com>
Enviado por: pgsql-es-ayuda-owner(at)postgresql(dot)org
03/01/2007 09:05 a.m.

Para
vhr <vhr(at)relcat(dot)com(dot)ar>, pgsql-es-ayuda(at)postgresql(dot)org
cc

Asunto
Re: [pgsql-es-ayuda] exportar a un XML

Muchas gracias por tu ayuda, creo q me va a servir el codigo q me pasaste
para modificarlo y adaptarlo a la necesidad q estoy requiriendo..!! La
intención q tengo es q al guardar datos en mi base, usare un stand alone
con postgres, me genere archivos XML, y despues esos archivos generados
migrarlos a mi base de datos de producción..!!, la idea es q otras
instituciones q no tengan internet puedan usar el sistema, mediante el
stand alone, y q sus datos guardados ya no sean tipeados en la central
donde estoy, sino q simplemente los migramos y ya esta.

2007/1/3, vhr <vhr(at)relcat(dot)com(dot)ar>:
Hola yo tengo unas funciones en Delphi que hacen eso, pero el tema es ....
a que le llamas pasarlo a XML? Me refiero a que es muy poco probable que
el pasaje que yo estoy haciendo fuera de utilidad para vos
de todos modos te paso el codigo, ya que podes modificarlo para hacer una
convencion distinta.

unit QRYaXML;

interface

uses
Classes, DB, ZAbstractRODataset, ZDataset,ZConnection;


Function QRYXML(sPrm: String; Ssn :TSesion; bse :byte): String;

implementation

uses
SysUtils;

var
s: String;

procedure InicioArchivo( Dataset: TDataset);

function XMLFieldType(fld: TField): string;
begin
case fld.DataType of
ftString: Result := '"string" WIDTH="' + IntToStr(fld.Size) + '"';
ftSmallint: Result := '"i4"'; //??
ftInteger: Result := '"i4"';
ftWord: Result := '"i4"'; //??
ftBoolean: Result := '"boolean"';
ftAutoInc: Result := '"i4" SUBTYPE="Autoinc"';
ftFloat: Result := '"r8"';
ftCurrency: Result := '"r8" SUBTYPE="Money"';
ftBCD: Result := '"r8"'; //??
ftDate: Result := '"date"';
ftTime: Result := '"time"'; //??
ftDateTime: Result := '"datetime"';
else
end;
{
if fld.Required then
Result := Result + ' required="true"';
if fld.Readonly then
Result := Result + ' readonly="true"';
}
end;

var
i: Integer;
begin
s := '<?xml version="1.0" standalone="yes"?><!-- Generado por RC --> '
+
'<DATAPACKET Version="2.0">';
s := s+('<METADATA><FIELDS>');

{write th metadata}
with Dataset do
for i := 0 to FieldCount-1 do s := s+('<FIELD attrname="' +
Fields[i].FieldName +
'" fieldtype=' +
XMLFieldType(Fields[i]) + '/>');
s := s+('</FIELDS>');
s := s+('<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>');
s := s+('</METADATA><ROWDATA>');
end;

procedure WriteFileEnd;
begin
s := s+('</ROWDATA></DATAPACKET>');
end;

procedure WriteRowStart(IsAddedTitle: Boolean);
begin
if not IsAddedTitle then s :=s+('<ROW');
end;

procedure WriteRowEnd(IsAddedTitle: Boolean);
begin
if not IsAddedTitle then s :=s+('/>');
end;

procedure WriteData(fld: TField; AString: ShortString);
begin
if Assigned(fld) and (AString <> '') then s :=s+(' ' + fld.FieldName +
'="' + AString + '"');
end;

function GetFieldStr(Field: TField): string;

function GetDig(i, j: Word): string;
begin
Result := IntToStr(i);
while (Length(Result) < j) do
Result := '0' + Result;
end;

var Hour, Min, Sec, MSec: Word;
begin
case Field.DataType of
ftBoolean: Result := UpperCase(Field.AsString);
ftDate: Result := FormatDateTime('yyyymmdd', Field.AsDateTime);
ftTime: Result := FormatDateTime('hhnnss', Field.AsDateTime);
ftDateTime: begin
Result := FormatDateTime('yyyymmdd', Field.AsDateTime);
DecodeTime(Field.AsDateTime, Hour, Min, Sec, MSec);
if (Hour <> 0) or (Min <> 0) or (Sec <> 0) or (MSec <>
0) then
Result := Result + 'T' + GetDig(Hour, 2) + ':' +
GetDig(Min, 2) + ':' + GetDig(Sec, 2) + GetDig(MSec, 3);
end;
else
Result := Field.AsString;
end;
end;

Function QRYXML(sPrm: String; Ssn :TSesion; bse :byte ): String;
var
i: Integer;
dts : TZReadOnlyQuery;
begin
s := '';
dts := TZReadOnlyQuery.Create(nil);
with dts do try
case bse of
0: Connection := Ssn.BD;
1: Connection := Ssn.BD1;
2: Connection := Ssn.BD2;
end;

SQL.Text := sPrm;
Open;

InicioArchivo(dts);

WriteRowStart(True);
for i := 0 to FieldCount-1 do WriteData(nil, Fields[i].DisplayLabel);
WriteRowEnd(True);

while (not EOF) do begin
WriteRowStart(False);
for i := 0 to FieldCount-1 do WriteData(Fields[i],
GetFieldStr(Fields[i]));
WriteRowEnd(False);
Next;
end;

finally
free;
end;

WriteFileEnd;

result :=s;

end;



end.


Esta claro que podes adaptar esto para que te hiciera el XML que vos
quieras (o requieras), me refiero a que podrias no poner la definicion de
campos y poner directamente los registros con la informacion, o al
contrario podrias agregar datos como por ejemplo reglas de validacion,
etc. Esto podrias programarlo en una funcion dentro de la base, bueno como
quieras.




In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message horta 2007-01-03 16:54:01 Problema de subscripción en la lista
Previous Message Tincho Carrera 2007-01-03 16:13:49 pgsql-es-ayuda unsubscribe