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.
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 |