![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Exportacion a XML
me encontre este codigo en varias paginas, sirve para la exportacion a XML, pero tengo problemas con este pues no sirve... aunque la idea general esta muy bien...
adjunto el codigo por si alguien mas avanzado en el tema puede decirme cual es el problema... variable Global
para la ejecucion...
Uso Delphi embarcadero 2010, y el problema que me da es en el archivo final generado... como que incluye espacios en blnco entre cada caracter.... si alguien tiene alguna idea... le agradesco... o si a alguien le corre sin problema, favor decirme para ver si podria ser algo en mi equipo... gracias |
|
#2
|
||||
|
||||
|
Hola; Lo primero decir que al colocar el código con los TAG's de Delphi (seguramente por un error en el parser) faltan cosas y el código ha quedado incorrecto (revisar el procedimiento WriteFileEnd, por ejemplo).
Lo coloco con las etiquetas CODE, por si alguien quiere copiarlo. Código:
procedure WriteString(Stream: TFileStream; s: string);
begin
StrPCopy(SourceBuffer, s);
Stream.Write(SourceBuffer[0], StrLen(SourceBuffer));
end;
procedure WriteFileBegin(Stream: TFileStream; Dataset: TDataset);
//············································································
function XMLFieldType(fld: TField): string;
begin
case fld.DataType of
ftString: Result := '"string" WIDTH="' + IntToStr(fld.Size) + '"';
ftSmallint: Result := '"i2"'; //??
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
Result := '"TIPO-DESCONOCIDO"';
end;
if fld.Required then
Result := Result + ' required="true"';
if fld.Readonly then
Result := Result + ' readonly="true"';
end;
//············································································
var
i: Integer;
begin
WriteString(Stream, '<?xml version="1.0" standalone="yes"?><!-- Generated by SMExport --> ' +
'<DATAPACKET Version="2.0">');
WriteString(Stream, '<METADATA><FIELDS>');
{write th metadata}
with Dataset do
for i := 0 to FieldCount-1 do
begin
WriteString(Stream, '<FIELD attrname="' +
Fields[i].FieldName +
'" fieldtype=' +
XMLFieldType(Fields[i]) +
'/>');
end;
WriteString(Stream, '</FIELDS>');
WriteString(Stream, '<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>');
WriteString(Stream, '</METADATA><ROWDATA>');
end;
procedure WriteFileEnd(Stream: TFileStream);
begin
WriteString(Stream, '</ROWDATA></DATAPACKET>');
end;
procedure WriteRowStart(Stream: TFileStream; IsAddedTitle: Boolean);
begin
if not IsAddedTitle then
WriteString(Stream, '<ROW');
end;
procedure WriteRowEnd(Stream: TFileStream; IsAddedTitle: Boolean);
begin
if not IsAddedTitle then
WriteString(Stream, '/>');
end;
procedure WriteData(Stream: TFileStream; fld: TField; AString: ShortString);
begin
if Assigned(fld) and (AString <> '') then
WriteString(Stream, ' ' + 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;
He añadido esto al else:
Que te debería ayudar a detectar si ese es tu problema. Por lo demás yo lo he probado y parece que el código funciona bien.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
|||
|
|||
|
Puedes utilizar una consulta en lugar de un DataSet ?
Creo tener idea de como corregir el problema, ¿ puedes poner el resultado que obtienes en el XML ? ¿Puedes poner los datos que son usados en el DataSet? Gracias. |
|
#4
|
||||
|
||||
|
Cualquier TQuery, TTable, TADOTable,... deriva de un DataSet, por lo tanto puedes utilizarlo con el resultado de un quey sin problemas (así lo he probado yo).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
|||
|
|||
|
Cita:
![]() |
|
#6
|
|||
|
|||
|
Hola.
Intentando de otra forma he obtenido la siguiente estructura en el XML. Código PHP:
Código PHP:
![]() Muchas gracias. ![]() |
|
#7
|
||||
|
||||
|
Cita:
el resultado que me da el archivo XML es: Código PHP:
Cita:
el dataset ejecuta una consulta de la tabla Personas(para este ejemplo especifico), y contiene...
pobre con los cambios de Neftali pero nada.. sigue igual... por cierto gracias por las prontas respuestas... Última edición por Wbarrantes fecha: 20-10-2010 a las 23:03:19. Razón: EDITAR SQL |
|
#8
|
||||
|
||||
|
Neftali...
Cita:
|
|
#9
|
||||
|
||||
|
Cita:
Habría que ir añadiendo los que faltan; Por ejemplo, al final puedes poner:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#10
|
||||
|
||||
|
Neftali
ok, genial, ya agregue los valores que hacian falta, (por cierto de donde tomas la tabla equivalencia de los valores, podria serme util en un futuro...)...
Pero sigo teniendo el problema en el archivo generado... como que mete un espacio en blanco entre cada caracter, antes de escribir el archivo xml... y ademas lo corta... por ejemplo la primera linea queda en el archivo Código PHP:
Código PHP:
|
|
#11
|
||||
|
||||
|
Cita:
En cuanto a los espacios no lo entiendo, porque eso lo añade esta línea que parece bastante "inofensiva". ![]() ![]() Código:
WriteString(Stream, '<?xml version="1.0" standalone="yes"?><!-- Generated by SMExport --> ' +
'<DATAPACKET Version="2.0">');
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#12
|
||||
|
||||
|
muy confundido???
si de echo alli tengo misdudas pues debugeando, la informacion entra nitida.... tengo office 2007 y windows XP, y Delphi 2010 (con licencia)... no veo que pueda estar fallando... y ya pobre el ejecutable en otras maquinas y nada... WriteString
Write
de echo cuando trate de revisar el ejemplo para escribir en excell, tambien me dio este tipo de problemas... me ponia un caracter con signo de pregunta, entre cada caracter de la cadena del string, que deseabaguardar en una celda... pero ya lo he probado, tambien en otras maquinas con configuraciones diferentes, lo que me lleva a pensar que podrian ser la unidades, mas bien... |
|
#13
|
||||
|
||||
|
¿No estará relacionado con Unicode?
Lo digo por los 2 caracteres en lugar de 1.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#14
|
||||
|
||||
|
pos la verdad no se...
pos la verdad, en este momento, ya no me queda piedra sin revisar... al menos hasta donde mi "malicia indigena" alcanza...
inicailmente pense que podria estar cortando la cadena por el tamano del por lo que lo triplique...
pero el resultado es el mismo... estoy en un 98% convencido que el problema viene dado por el Stream, lo que me tiene chichoso, es que el problema no parece tenerlo nadie mas en este foro... pero si cambio de equipo y lo intento de nuevo, yo sigo teniendo problemas... |
|
#15
|
||||
|
||||
|
resp
Carga los datos en un cliendataset y lo guardas como xml esta atarea el clien dataset la hace solita.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Layouts de exportación | palets | Varios | 0 | 11-02-2009 16:58:22 |
| exportacion de datos | LoboMDQ | Varios | 1 | 01-11-2006 02:17:24 |
| Exportacion de datos... | chux | Varios | 6 | 10-05-2006 11:54:57 |
| Exportacion de imagenes | Coco_jac | Gráficos | 0 | 10-06-2005 17:34:29 |
| Exportación a Word | claumar | Impresión | 1 | 20-09-2004 13:48:43 |
|