Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2011
delphijm delphijm is offline
Miembro
 
Registrado: abr 2008
Posts: 47
Poder: 0
delphijm Va por buen camino
Copiar campo ftDATASET a otro campo

Hola a todos,

Tengo dos TClientDataSet en los que he establecido una relacion de maestro detalle... (Llamemosles a este par --> SET1)

En el TClientDataSet que actua como "maestro", al establecer la relacion, se ha creado un campo de tipo ftDataSet, el cual "apunta" a los registros de detalle...

Este mismo mecanismo lo utilizo para otro par de TClientDataSet de iguales caracteristicas que los anteriores... (Llamemosles a este par --> SET2).

El tema es que tengo que recorrer el dataset maestro de SET2 para insertar en el SET1 todos sus registros... (first; while not eof; asignaciones; next...)

Para cada registro asigno cada campo individualmente y no tengo ningun problema...

El problema lo tengo al asignar el campo de tipo ftDataSet...

Lo intento con:

cdsMaestro1.FieldByName('DTdetalle').value:=cdsMaestro2.FieldByName('DTdetalle').value;

pero no lo asigna...

No veo que exista ninguna propiedad de FieldByName como .asDataSet

Pienso que tambien podria asignar el campo origen a un campo Dataset y recorrer este dataset detalle e irlo insertando registro a registro, pero me gustaria encontrar un metodo mas comodo similar a la asignacion directa de campo a campo...

Alguien sabe como puede hacerlo?

Gracias
Responder Con Cita
  #2  
Antiguo 12-03-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Me temo amigo que para el detalle debes hacerlo registro a registro..... vamos que es solo agregar otro ciclo(While) más......hummm....aunque viendo mejor la situación de tu problema me pregunto si no te podría servir el método CloneCursor que tienen los ClientDataSet, aunque en realidad el método ClonCursor lo único que hace es hacer que ambos clientDataset apunten a las misma direccion de memoria, es decir es como tener dos punteros hacia la misma direccion de memoria,pero en éste caso la navegacion, filtrado,etc se hace independientemente, pero si eliminamos,modificamos o insertamos registros en cualquiera de los ClientDataSet(llámese original o el supuesto clon) se va reflejar en el otro, por eso no comparto la idea de que dicho método se llame ClonCursor por que no clona nada . Si buscamos el significado de la palabra "Clon" o "Clonación" nos vamos a dar cuenta que es la creacion de otro "objeto" (hablando en terminos infórmatico) independiente, de tal forma que si cambio algo de dicho objeto, no tiene por qué afectar al original y viceversa. por eso el método ClonCursor debío tener otro nombre.
Desde luego en delphi existe el método "Assign" que todas las clases descendiente de "TPersistent" lo heredan, dicho método supuestamente debería asignar(clonar) un objeto a partir de otro,claro está que cada clase debería sobreescribirlo(Override) e implementarlo, pero lamentablemente no todas las clases lo implemetan tan solo algunas que otras clases por ejemplo la clase TStrings,etc., pero la clase TClientDataSet no la ha sobreescrito.
Actualmente desconosco si en las más nuevas versiones de Delphi se han implementado dicho método en más clases...
De todas formas te pongo a continuacion un ejemplo de como clonar(copiar) un clientDataSet en otro de la siguiente Forma :
Código Delphi [-]
procedure ClonClientDataset(Original, Clon: TClientDataset);
var
  Stream: TMemoryStream;
begin
  Stream:= TMemoryStream.Create;
  try
    Original.SaveToStream(Stream);
    Stream.Position:= 0;
    Clon.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;
Espero te sea de utilidad...
Un saludo Clonado...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 14-03-2011
delphijm delphijm is offline
Miembro
 
Registrado: abr 2008
Posts: 47
Poder: 0
delphijm Va por buen camino
Hola rgstuamigo,

Lastima... Ya lo he hecho con otro bucle while...

Por lo que comentas del clonecursor, estoy totalmente de acuerdo... Deberia llamarse, por ejemplo, linkDataSet...

El codigo de ejemplo me sera util...

Muchas gracias...

Un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Incrementar campo según el valor de otro subzero Firebird e Interbase 3 06-08-2008 21:41:52
campo de busqueda con otro campo josi Varios 1 04-06-2008 00:53:07
Ordenar relacion Master/Detail por otro campo!! arieliten Impresión 3 24-06-2005 14:54:21
Como copiar un registro cambiando el campo de clave primaria Javi2 SQL 2 17-09-2004 20:49:50
Copiar campo lore Conexión con bases de datos 3 09-02-2004 16:53:56


La franja horaria es GMT +2. Ahora son las 15:36:55.


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