Alguien le ha pasado algo parecido al siguiente caso:
Actualmente estoy implementando la factura electrónica en mi sistema desarrollado en delphi 2009 y me he topado con algo muy extraño. Mi aplicación trabaja en Win 32 y Atreves de internet por esta razón tengo que grabar el xml y la factura en Pdf en un campo dentro de una base de datos SQL Server o Access 2000 para posteriormente poder exportarlo desde cualquier lugar y ademas mantener un respaldo centralizado de la información fiscal.
Actualmente ya tengo generada mi cadena Original, Sello digital, y la factura en formato pdf para esto gravo La cadena Original en un campo memo y el sello en otro, con lo que refiere al pdf lo grave en un campo Blob.
El problema que se me presento es cuando gravo el XML en un campo memo para esto utilice el siguiente método, imaginemos para este ejemplo que mi XmlDoc contiene la información de mi factura:
var strXMLFactura: UTF8String;
XMLDoc.SaveToXML( strXMLFactura );
dsFacturaMasterFactElectXML.AsAnsiString := strXMLFactura;
Esto no me funciono, cuando obtengo el xml y lo quiero gravar en disco desde el campo memo me grava con formato invalido.
dsFacturaMasterFactElectXML.SaveToFile( FileFacturaXML );
Haciendo prouebas se me ocurrió utilizar un Stream y cambie mi lógica a la siguiente.
var XMLStream: TStringStream;
XMLDoc.SaveToStream(XMLStream);
dsFacturaMasterFactElectXML.LoadFromStream(XMLStream);
dsFacturaMasterFactElectXML.SaveToFile( FileFacturaXML );
Esto si funciona bien me grava el xml en el campo memo y después desde cualquier lugar lo puedo obtener y salvarlo como un xml valido PERO me pasa algo bien rarísimo al gravar el campo memo y verificar en mi base de datos usando en Access 2007 en el campo se ve que la información está en CHINO. Ya busque acerca de esto y la verdad no encuentro el por qué, aunque esta funcionando perfectamente al exportar la información.

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
GUARDAR EL XML EN UN CAMPO DE BASE DE DATOS
-
- Mensajes: 1
- Registrado: Vie Nov 19, 2010 10:03 pm
-
- Mensajes: 116
- Registrado: Jue Ene 27, 2011 4:21 pm
Re: GUARDAR EL XML EN UN CAMPO DE BASE DE DATOS
En mi opinión el archivo XML debería estar en un campo BLOB también.
Los Blob son información binaría y se conservan con seguridad de que nada los altera.
En cambio en un campo memo, es posible que existan mas consideraciones como el manejo de idiomas, codificaciónes, etc...
Yo hago algo similar, pero he identificado que los xml son alterados cuando se envían por correo directamente como adjuntos (!?). Por eso decidí poner mis xml en un archivo ZIP y meter el archivo resultado como BLOB. Así de paso pretendo ahorrar espacio en disco porque los XML y los PDF se desinflan hasta el 5% del original.

Los Blob son información binaría y se conservan con seguridad de que nada los altera.
En cambio en un campo memo, es posible que existan mas consideraciones como el manejo de idiomas, codificaciónes, etc...
Yo hago algo similar, pero he identificado que los xml son alterados cuando se envían por correo directamente como adjuntos (!?). Por eso decidí poner mis xml en un archivo ZIP y meter el archivo resultado como BLOB. Así de paso pretendo ahorrar espacio en disco porque los XML y los PDF se desinflan hasta el 5% del original.

- acanas
- Mensajes: 477
- Registrado: Mar Ene 11, 2011 3:18 pm
Re: GUARDAR EL XML EN UN CAMPO DE BASE DE DATOS
Yo lo almaceno en una base de datos firebird como Blob pero tipo Text osea con un dominio del tipo: BLOB SUB_TYPE 1 SEGMENT SIZE 400 CHARACTER SET UTF8. Pero también es buena idea comprimirlo y grabarlo en un blob de tipo binario osea SUB_TYPE 0.
Zyphersoft Development
-
- Mensajes: 425
- Registrado: Jue Ago 05, 2010 3:11 pm
Re: GUARDAR EL XML EN UN CAMPO DE BASE DE DATOS
Especulando...falcon escribió:...
Haciendo prouebas se me ocurrió utilizar un Stream y cambie mi lógica a la siguiente.
var XMLStream: TStringStream;
XMLDoc.SaveToStream(XMLStream);
dsFacturaMasterFactElectXML.LoadFromStream(XMLStream);
dsFacturaMasterFactElectXML.SaveToFile( FileFacturaXML );
Esto si funciona bien me grava el xml en el campo memo y después desde cualquier lugar lo puedo obtener y salvarlo como un xml valido PERO me pasa algo bien rarísimo al gravar el campo memo y verificar en mi base de datos usando en Access 2007 en el campo se ve que la información está en CHINO. Ya busque acerca de esto y la verdad no encuentro el por qué, aunque esta funcionando perfectamente al exportar la información.
Quiero pensar que la base de datos ha de almacenar los campos memo en modo WideString, por eso cuando le pasas un AnsiString y después lo grabas queda alterado. Por otro lado, al grabarlo como Blob queda idéntico, pero si intentas ver su interior (como texto) entonces ha de interpretar el AnsiString como WideString y mostrar el contenido "en chino"

Saludos

(p.d. "gravar" es aplicarle un impuesto a algo)