Re: exportar a un XML

From: "Diego Ayala" <netdiego81(at)gmail(dot)com>
To: vhr <vhr(at)relcat(dot)com(dot)ar>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: exportar a un XML
Date: 2007-01-03 14:05:02
Message-ID: 6b81cb150701030605l3b39ad67h9f66ec1efee9a1b8@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message vhr 2007-01-03 14:10:25 RE: Desarrollo con Delphi y Postgres
Previous Message Telmo Santana 2007-01-03 13:59:27 unsubscribe