Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Unir 3 ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=71222)

Rockin 07-12-2010 18:38:46

Unir 3 ClientDataSet
 
Buenas a todos, he estado buscando or el foro y por internet y no encuentro lo que quiero.

Tengo 3 clientdataset, de tres bases de datos distintas.

Lo que quiero es unirlos en uno, para así exportar el resultado a Excel, en un fichero txt separado por tabulaciones(esto ya lo tengo). Pero no se como hacerlo para generar solo un fichero.

No se si me exlicado bien.

Saludos.

duilioisola 07-12-2010 19:05:45

Supongo que deberás hacerlo a mano...

- pones los 3 DataSets ordenados por los mismos campos
- Luego recorres los tres al mismo tiempo, verificando que la clave (los campos por los que se unen) coincidan.
- En donde no coincidan, deberás rellenar con blancos los lugares que le toca.

También se me ocurre hacerlo utilizando el DataSource.
Esto une el primer DataSet con el segundo y el tercero, pero no controla los que están en el segundo y en el tercero y no en el primero

Código Delphi [-]
{Los DataSource}
DSDataSet1.DataSet := DataSet1;
DSDataSet2.DataSet := DataSet2;
DSDataSet3.DataSet := DataSet3;

{La union de los DataSets a travez de su DataSource: 1-->2 y 1-->3}
DataSet2.DataSource := DSDataSet1;
DataSet3.DataSource := DSDataSet1;

{O puede unirse asi: 1-->2 y 2-->3}
DataSet2.DataSource := DSDataSet1;
DataSet3.DataSource := DSDataSet2;

{Abro las tablas}
DataSet1.Open;
DataSet2.Open;
DataSet3.Open;

{Recorro DataSet1 y en DataSet2 y 3 se posicionaran automaticamante}
while (not DataSet1.EOF) do
begin
   ...
   DataSet1.Next;
end;

Rockin 07-12-2010 19:19:59

Perdona pero no lo veo, será porque estoy jodido, ya que hoy es mi cumpleaños y en vez de pillarme el puente como toda la empresa llevo desde las 8 a.m. preparando un tema a contrareloj.

Espero mañana estar más espabilado y hacerlo.

Gracias de todas formas.

Al González 07-12-2010 21:20:17

Bueno, como hoy es tu cumpleaños (felicidades) y suponiendo que no haya duplicidad de registros y que la estructura de campos sea idéntica en los tres conjuntos de datos, te sugiero que uses el método AppendData:

Código Delphi [-]
ClientDataSet1.AppendData (ClientDataSet2.Data, True);

Nota: Considera que AppendData no copia los campos de tipo InternalCalc.

Saludos. :)

Rockin 08-12-2010 13:53:42

Gracias por la respuesta.

Los campos son identicos y no hay registros duplicados. Lo probaré, lo que he hecho para salir del paso es crear 3 txt y unirlos.

Saludos


La franja horaria es GMT +2. Ahora son las 02:39:26.

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