PDA

Ver la Versión Completa : Problemas con Maestro Detalle


FelipeDiaz
02-11-2007, 14:55:46
Hola a todos.

Agradezco me ayuden con lo siguiente:

Tengo un BD Firebird y estoy tratando de acceder desde delphi por medio de componentes FIBPLUS

Estoy tratando de implementar una realcion maestro detalle, para lo cual tengo: dos FibDataset, DSM (Relacionada con la tabla Maestra)
DSD (Relacionada con la tabla Detalles)

Igualmente dos Datasources, DTM y DTD
y dos DBGRID DBGM y DBGD


1.
a. Realizo la consulta en al propiedad SQL del DSM,
b. Coloco la propiedad Active= true,
c. Conecto el DTM al DSM y el DBGM al DTM
Resultado: en tiempo de diseño puedo ver que todo funciona hasta alli bien.

2.
a. Conecto la propiedad datasource del DSD al DTM,
b. Realizo la consulta del DSD, teniendo en cuenta la clausula Where ( de la forma: Detalle.FK= Maestro.PK)
c. Conecto el DTD al DSD y el DBGD al DTD

Resultado: EL DBGRID DETALLE me muestra todos los registros que se encuentran en la tabla detalles. Es decir no me esta funcionando la relacion MASTER-DETAIL

Ya estuve revisando los ejemplos de la pagina Devrace, pero no hay documentacion de los detalles a tener en cuenta, y revisando todas als propiedades de los compornentes, no encunetro diferencias significativas...

No se que estoy pasando por alto. en la Base de datos direbird existe la relacion entre clave foranea(detalle) y la principal(maestra) de las tabals en mencion.

Agradexco nuevamente a quien me pueda colaborar.


Felipe Diaz.

duilioisola
02-11-2007, 15:26:08
Supongo que en el DataSet Detalle no tienes bien puesto el where del SQL.

Cabecera es (ID integer, datos string)
- PK ID
Detalle es (ID_CAB integer, datos_det string);
- FK ID_CAB=Cabecera.ID


begin
[Conectar Base de Datos]
[Iniciar Transacciones]

DSM.Close;
DSD.Close;
DSM.SelectSQL.Text = 'SELECT * FROM CABECERA';
DSD.SelectSQL.Text = 'SELECT * FROM DETALLE WHERE ID_CAB=?ID';

DSD.DataSource := DTM;

DSM.Open;
DSD.Open;
end;


Si ves el ejemplo que te he puesto, los campos no se tienen que llamar igual necesariamente, pero los nombres de los parámetros si. (?ID es el nombre que tiene el campo en Cabecera)

Si posteas la estructura de las dos tablas, quizás te pueda decir qué debes poner en cada uno de los dos SelctSQL.

FelipeDiaz
02-11-2007, 17:05:37
Mucahs gracais DuiloiSola,

Si me funciono, al parecer el problema era que en la consulta del dataset DETALLE, estaba colocando en el FROM tanto la tabel detalle como la maestra, y sin el carater de parametro que en mi lugar es ":".

Muchas gracais por la respuesta y la rapidez.


muy amable.