Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ClienteDataSet a ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=76036)

Chaja 05-10-2011 17:53:35

ClienteDataSet a ClientDataSet
 
hola:
Como andan todos.... bien. Lo que estoy intentando hacer es: Tengo un ClienteDataSet el cual cargo los datos desde un archivo XML, el cual tiene todos los campos de la tabla de la base de datos. y tengo otro ClienteDataSet el cual esta vinculado con su DSProvider y este al SQL.
quiero asignar los datos del 2º CDS al 1º, pero este no se carga con los datos. yo hago esto:

CDSVentas:= CDSDatos_XML;

o debo recorre el el segundo e ir poniendo campo por campo?


Gracias

Luis Roldan
Mar del Plata
Argentina

Chris 05-10-2011 18:23:52

Hola Chaja!

Podrías explicarte mejor?

Saludos!

Al González 05-10-2011 18:51:05

Usa los métodos AppendData y, si se desea eliminar el contenido actual, EmptyDataSet. Encontrarás varios ejemplos de su uso en estos mismos foros. :)

Saludos.

CHECHE81 05-10-2011 19:50:25

Ciclo¡¡
 
Saludos a todos¡¡:)
Pues haciendo un ciclo While recorriendo el ClientDataSet que tiene los datos, en mi caso el AdoDataSet1 lo cargue con datos de un archivo de excel que necesito cargar a mi tabla cdsPAsignaturas en mi bd de MySQL, algo asi:

Código Delphi [-]
AdoDataSet1.First;
   While not AdoDataSet1.EoF do
   begin
     CDSLastidA.active:= false; // cierro,esto lo uso para obtener el select max(idPlanYAsignatura) de mi tabla
     CDSLastidA.active:=true;  //abro,esto lo uso para obtener el select max(idPlanYAsignatura) de mi tabla

     cdsPAsignaturas.Append;  // Aquí pones en modo de inserción a tu tabla donde copiaras los datos.. 
     cdsPAsignaturas.FieldByName('idPlanYAsignatura').Value:= CDSLastidA.FieldByName('id').AsInteger+1;// Aquí obtengo el ultimo valor del campo ID, así lo uso yo ok;)
     cdsPAsignaturas.FieldByName('idPlanGeneral').Value := AdoDataSet1.Fields[0].Value;
     cdsPAsignaturas.FieldByName('sPlanNombreOficial').Value:= AdoDataSet1.Fields[1].Value ;
     cdsPAsignaturas.FieldByName('sPlanNombreCorto').Value := AdoDataSet1.Fields[2].Value ;
     cdsPAsignaturas.FieldByName('iOrden').Value := AdoDataSet1.Fields[3].Value ;
     cdsPAsignaturas.FieldByName('sPeriodoNombre').Value := AdoDataSet1.Fields[4].Value ;
     ....
     cdsPAsignaturas.post; // guardas los datos
     
     AdoDataSet1.Next;// siguiente hasta terminar el recorrido
    
     end;


Claro que para guardar los cambios directamente a la bd debe tener el famoso ApplyUpdates en el evento AfterPost del ClientDataSet donde copiaras los datos algo como:
Código Delphi [-]
procedure Tdmconexion.cdsPlantelesAfterPost(DataSet: TDataSet); 
begin
   if cdsPlanteles.ChangeCount > 0 then
   cdsPlanteles.ApplyUpdates( 0 );
end;

Esto me funciona, espero te sirva Chaja...saludos¡¡¡:D

Chaja 05-10-2011 20:16:56

lo que quiero hacer es freezar un factura.Si se pude usar el termino.
Entonces que hago,el usuario empieza hace una factura, y por la mitad del detalle,decide cortar para facturar a otro cliente. para no perder lo echo, como uso clientdataset, hago un SavetoFile a un XML de los datos que tiene cargado. hago la otra factura y luego seria recuperar lo que habia empezado. para eso los archivos xml que habia guardado en el disco los leo con un CDS y hago un LoadFromFile(xx.xml) pero los datos del CDS con los datos delXML los debo asignar a los CDS que manejo habitualmente con los datos. Lo que no queria era asignar los datos de los campos de uno a otro en forma manual, pense al ser dos CDS iguales haciendo CDSDatos:=CDSXml, era suficiente.

Gracias

Al González 05-10-2011 23:47:33

Cita:

Empezado por Chaja (Mensaje 414657)
lo que quiero hacer es freezar un factura.Si se pude usar el termino.
Entonces que hago,el usuario empieza hace una factura, y por la mitad del detalle,decide cortar para facturar a otro cliente. para no perder lo echo, como uso clientdataset, hago un SavetoFile a un XML de los datos que tiene cargado. hago la otra factura y luego seria recuperar lo que habia empezado. para eso los archivos xml que habia guardado en el disco los leo con un CDS y hago un LoadFromFile(xx.xml) pero los datos del CDS con los datos delXML los debo asignar a los CDS que manejo habitualmente con los datos. Lo que no queria era asignar los datos de los campos de uno a otro en forma manual, pense al ser dos CDS iguales haciendo CDSDatos:=CDSXml, era suficiente.

Gracias

Te recomiendo que uses un TClientDataSet en memoria, no es necesario que lo guardes a un archivo XML. Usando el método AppendData que te sugerí mensajes arriba. :)

Saludos Cheché, un gusto verte.

Al.


La franja horaria es GMT +2. Ahora son las 17:54:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi