Ver Mensaje Individual
  #1  
Antiguo 14-05-2004
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Reputación: 22
Toni Va por buen camino
Problema relacion maestro-detalle (Nested Dataset)

Hola,

Ante todo deciros que llevo dias consultando el foro antigüo y el nuevo, y no consigo encontrar un post con la solucion a mi problema concreto. Si que hay muchos post al respecto.

Estoy realizando una relacion de maestro-detalle de 2 querys de lado del servidor. De tal forma que desde el cliente mediante un ClientDataSet recibira las dos querys relacionadas.

En un principio lo unico que no me funciona, es que al abrir el ClienteDataSet desde el cliente, no me muesta los registros del detalle.

Todo esto lo estoy realizando en C++ Builder 5, IB6, IBX 5.04 y Midas, de la siguiente manera:

Tengo definido en un TRemoteDataModule los siguientes componentes:

TBIQuery1 DocCabecera
TBIQuery2 DocDetalle (DataSource = DataSource1)
TIBUpdateSQL1 (asignado a la propieda TIBQuery1->UpdateObject)
TIBUpdateSQL2 (asignado a la propieda TIBQuery2->UpdateObject)
TDataSource1->DataSet = DocCabecera

Para las querys utilizo el conjunto TIBQuery's + TIBUpdateSQL, para que sean querys modificables.

La relacion maestro-detalle la realizo asignando a la propiedad DataSource del query DocDetalle un TDataSource que apunta a al query DocCabecera.

En las 2 querys tengo creados los campos como persistentes y asignado a true la propiedad ProviderFlags->pfInKey de los campos de la clave primaria.

La query cabecera es del estilo:

select * from "DocCabecera"
where "idEmpresa"=:P_EMPRESA and "idLibro"=:P_LIBRO and "idDocumento"=:P_DOCUMENTO;

La query detalle es del estilo:

select * from "DocDetalle"
where "DocDetalle"."idEmpresa"=:"idEmpresa" and "DocDetalle"."idLibro"=:"idLibro" and "DocDetalle"."idDocumento"=:"idDocumento";

Asigno el query DocCabecera a un DataSetProvider con la propiedad UpdateMode = upWhereKeyOnly.

En la parte cliente tengo un ClienteDataSet1 que apunta al DataSetProvider del query DocCabecera. En este ClientDataSet tengo los campos tambien como persistentes y tengo uno que se llama DocDetalle de tipo DataSet.

Este campo de tipo DataSet lo asigno a otro ClientDataSet2 en tiempo de diseño, en la propiedad DataSetField. Tambien he probado a asignarlo medeante codigo, pero todo sigue igual.

Estos ClientDataSet's los tengo enlazados a unos TDataSource que a su vez estan enlazados a unos grids.

Cuando abro los ClientDataSet's no me sale ningun error, lo unico que no me salen los registros del detalle. Eso si el grid muestra los campos del detalle (en blanco).

En un principio creo que la relacion esta bien hecha, pues he seguido todos los pasos que he leido en todos los post.

Saludos,
__________________
Saludos,

Bitman
Responder Con Cita