PDA

Ver la Versión Completa : ClienDataSet to XML


Chaja
07-10-2011, 15:31:54
Otra vez yo :
bueno sigiendo el tema que inicie (ClientdataSet to ClientDataSet). me encuentor con la siguiente situacion.
Cuando hacia en las prubas la exportacion de los datos que habia en los CDS, estos estana llenos y en modo browse despues de haer una consulta, luego apreto un boton y genero los SaveToFile(**xml). andaba todo bien la exportacion. Bien ahora veo que en el proceso de carga de un nuevo registro y los CDS estan en modo Instert y hago un SaveToFile, en los xml no me guarda los datos si la estructura de la tabla.
No se puede hacer un savetofile, mientras el CDS este en modo Insert? o hay otra forma de hacerlo?

Gracias

Luis Roldan
Mar del Plata
Argentina

Al González
07-10-2011, 17:24:15
Hola Luis.

El método SaveToFile llama indirectamente a WriteDataPacket, el cual inicia con estas líneas:

procedure TCustomClientDataSet.WriteDataPacket(Stream: TStream; WriteSize: Boolean;
Format: TDataPacketFormat = dfBinary);
var
Size: Integer;
DataPtr: Pointer;
begin
if Active then CheckBrowseMode;

Ese CheckBrowseMode se encarga ya sea de guardar (en la memoria del conjunto de datos) o de cancelar el registro que se encuentra en modo de inserción. Es decir, hace un Post o un Cancel, dependiendo de si el registro tiene o no valores que hayan sido asignados a sus campos fuera del evento OnNewRecord. Si el registro ya tiene capturado algo, debería guardarse y luego ser incluido en la exportación; en cambio, si está vacío se cancelará.

Por otra parte, ¿no te animaste a usar AppendData? Así no dependerías de un archivo. :)

Saludos.

Al González.

Chaja
08-10-2011, 17:12:18
Gonazale....
como le va mi cuate.... un gran abrazo desde argentina... y te cuento que con ganas de conocer tu maravilloso pais.
Lo del AppendData, si pero pasa como me decias no toma los campos calculados. No me funciono. El echo de mandarlo a un archivo xml, es por que el user puede tener mas de una factura o comprobante guardado..
mmmmm Mi formato de las tablas en una factura , esta compuesto por tres archivos, Cabecera, detalle e impuestos.

cuando esta en inserccion y despues de cargar algunos datos con Ctrl+F ejecuto esto

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TFormCpbte_2.FreezarExecute(Sender: TObject); var i:integer; CDSCab,CDSDet:TClientDataSet; begin inherited; if not DirectoryExists(ExtractFilePath(ParamStr(0))+'facturas freezadas') then CreateDir(ExtractFilePath(ParamStr(0))+'facturas freezadas'); if Not(DatosVentas.CDSVentaCab.IsEmpty) Then begin if DatosVentas.CDSVentaDet.State in [dsInsert,dsEdit] then DatosVentas.CDSVentaDet.Post; if DatosVentas.CDSVentaCab.State in [dsInsert,dsEdit] then DatosVentas.CDSVentaCab.Post; CDSCab:=TClientDataSet.Create(Self); CDSCab.CloneCursor(DatosVentas.CDSVentaCab,True); // For i:=0 to CDSCab.FieldCount-1 do // begin // if CDSCab.Fields[i].Required Then // ShowMessage(CDSCab.Fields[i].FieldName+':'+ // CDSCab.Fields[i].AsString); // end; CDSDet:=TClientDataSet.Create(Self); CDSDet.CloneCursor(DatosVentas.CDSVentaDet,True); CDSCab.SaveToFile(ExtractFilePath(ParamStr(0))+'facturas freezadas\'+DatosVentas.CDSVentaCabID_FC.AsString+'-'+DatosVentas.CDSVentaCabCODIGO.AsString+'-'+DatosVentas.CDSVentaCabNOMBRE.AsString+'.XML'); CDSDet.SaveToFile(ExtractFilePath(ParamStr(0))+'facturas freezadas\'+DatosVentas.CDSVentaDetID_CABFAC.AsString+'.xm_'); // DatosVentas.CDSVentaCab.SaveToFile(ExtractFilePath(ParamStr(0))+'facturas freezadas\'+DatosVentas.CDSVentaCabID_FC.AsString+'-'+DatosVentas.CDSVentaCabCODIGO.AsString+'-'+DatosVentas.CDSVentaCabNOMBRE.AsString+'.XML'); // DatosVentas.CDSVentaDet.SaveToFile(ExtractFilePath(ParamStr(0))+'facturas freezadas\'+DatosVentas.CDSVentaDetID_CABFAC.AsString+'.xm_'); end else ShowMessage('No Hay datos para exportar....'); ShowMessage('Datos exportados....'); FreeAndNil(CDSCab); FreeAndNil(CDSDet); end;


no se si fui mas claro....

Luis Roldan
Mar del Plata
Argentina

Chaja
09-10-2011, 04:36:32
bien... gracias por la ayuda , me sirvio y lo pude solucionar.... un abrazo


Luis Roldan
Mar del Plata
Argentina

Al González
09-10-2011, 08:33:12
Que bueno que lograste solucionarlo, Luis.

Cierto, AppendData no copia los campos calculados. Debería hacerlo con los de tipo InternalCalc, pero MIDAS viene con una especie de convencionalismo que lo impide. En casos así, lo he solucionado salvando en un Variant los valores de todos los campos InternalCalc para luego reasignarlos.

[...] como le va mi cuate.... un gran abrazo desde argentina... y te cuento que con ganas de conocer tu maravilloso pais.
Acá eres bienvenido. Este país, como los demás, es de todos los que desean mejorar el mundo. Y sí, aquí hay cientos de maravillas que hacen sentir afortunado a quien vive en el país o lo visita. :)

Sólo considera que ahora el ambiente está muy peligroso. En muchas carreteras secundarias la máxima autoridad es un grupo mafioso y asquerosamente armado. Lo mismo pasa con buena parte de los pueblos. Mientras que en las ciudades hay una lucha de todos contra todos entre los políticos, la policía, el ejército y los narcotraficantes, con periodos de aparente calma en los que el ciudadano, como defensa mental involuntaria quizá, se olvida de la realidad e intenta hacer una vida normal, hasta que otro abrupto y frío episodio de sangre lo regresa al verdadero México de este principio de siglo.

Tal vez en 2014 sea más seguro venir a México, pero por mi parte serás bien recibido cuando gustes.

Un abrazo parcialmente iraquí.

Al González.

Chaja
12-10-2011, 06:16:02
Fiera:

si, he visto mucho CNN y se que tienen unos problemitas con los carteles y otros menesteres. Aca en Argentina, tenemos lo nuestro. Ultimamanete la mafia China, hace uso de las calles para arreglar a los tiros sus interese economicos. Tambien estan los villeros ( sin ofender ) que hay por algunos barrios que te matan por un telefono celular. Pero no podes obsecionarte con todo por que si no no vivis. Es el problemas de las ciudades grandes. DF me dijieron que es bastante grande tanto o mas que Buenos Aires. Yo vivo en una ciudad llamada Mar del Plata http://www.google.com.ar/search?q=mar+del+plata&hl=es-419&biw=1366&bih=675&prmd=imvns&tbm=isch&tbo=u&source=univ&sa=X&ei=zg-VTuS4DMihtwfe1tWPBw&sqi=2&ved=0CHEQsAQ
es una ciudad a orillas de la costa, y en verano se llena de gente y algunos no deseable en busca de lo que poseen los turistas que viene a pasar unos dias en la playa y en fin. Pero es algo creo que pasa en todo nuestro continente. Brasil, Bolivia, Paraguay etc. pero como somos del tercer mundo , al menos los de esta parte, somo mas noticias. Los yanquis tambien tienen lo suyo no?.
Bueno Al, un abrazo y ojala pudiermos vernos para tomar una cerveza juntos.... o si queres podemos hacer un asadito aca en mi casa, y unas buenas empanadas con unos buenos vinos tintos... :D:D:D:D:D

Luis Roldan
Mar del Plata
Argentina

Al González
12-10-2011, 08:18:48
Bueno Al, un abrazo y ojala pudiermos vernos para tomar una cerveza juntos.... o si queres podemos hacer un asadito aca en mi casa, y unas buenas empanadas con unos buenos vinos tintos... :D:D:D:D:D
¡Que bien! Te acepto el asado, las empanadas y el tinto. De Argentina he probado los dos últimos, pero me falta el asado. :)

Y en México nos tomaremos unas cervezas León con un pollo asado estilo Pátzcuaro. ;)