FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema con Maestro/Detalle
Hola gente del foro, queria consultarles sobre un problema relacionado con realizar altas en una relación maestro detalle, que me surgio hace poco y no se como solucionarlo, paso a comentarles:
Tengo en una base de datos Firebird 2.0 las siguientes tablas CREATE TABLE TABLA1 ( ID INTEGER NOT NULL, NOMBRE VARCHAR(50) ); CREATE TABLE TABLA2 ( ID INTEGER NOT NULL, ID_TABLA1 INTEGER, NOMBRE VARCHAR(50) ); ALTER TABLE TABLA2 ADD CONSTRAINT FK_TABLA2 FOREIGN KEY (ID_TABLA1) REFERENCES TABLA1 (ID) ON DELETE CASCADE ON UPDATE CASCADE; En el proyecto de Delphi (Delphi 2007) tengo un Formulario y un modulo de datos, en la reclación Maestro/Detalle utilizo componentes de DBExpress Formulario: Maestro/Detalle Las prompiedades de los componetes son: Modulo de datos: SQLDataSet1: - CommandText: select * from TABLA1 - SQLConnection: Conexion - Tiene los componentes de campo creados - ID --> ProviderFlags --> pfInKey --> True DataSource1: DataSet: SQLDataSet1 SQLDataSet2: - CommandText: select * from TABLA2 where ID_TABLA1 = :ID - SQLConnection: Conexion - DataSource: DataSource1 - Tiene los componetes de campo creados - ID --> ProviderFlags --> pfInKey --> True DataSetProvider1: - DataSet: SQLDataSet1 - Exported: False - UpdateMode: upWhereChanged - poIncFieldProps: True - poCascadeDeletes: True - poCascadeUpdates: True - poAutoRefresh: True - poPropagateChanges: True - poAllowCommandText: True ClientDataSet1: - ProviderName: DataSetProvider1 - Tiene los componentes de campo creados y aparece el campo SQLDataSet2 ClientDataSet2: - DataSetField: ClientDataSet1SQLDataSet2 - Tiene los componentes de campo creados Hasta ahí parece estar todo bien, si tengo datos me los muestra, si quiero editar o eliminar registros del maestro o del detalle me deja hacerlo sin problemas, el problema aparece cuando creo un nuevo registro del detalle, al hacer un post en el detalle me genera el siguiente error Pero los datos son correctos, por lo que estuve observando, el problema es que en la relación Maestro/Detalle Delphi "piensa" que el campo ID del detalle es la Foreign Key en vez de el campo ID_TABLA1, por lo que estuve averiguando este problesa surge cuando el campo foreign key no tiene el mismo nombre que el id del maestro, ¿Hay alguna forma de cambiar la relación entre estos campos y especificar que el campo ID_TABLA1 es el foreign key y no el campo ID? Saludos y espero que me puedan ayudar Para los que quieran ver el Proyecto se encuentra acá
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS |
#2
|
||||
|
||||
En el evento OnNewRecord del dataset detalle debes de asignarle la llave foranea (la del maestro).
PD. Que buena explicacion. |
#3
|
||||
|
||||
Kipow gracias por responder, ya intente eso pero no resulto, sigue generando el mismo error, cabe destacar, que en algunos casos si hago unas modificaciones en las propiedades de los componentes funciona, pero esto no siempre es asi, no se xq algunas veces funciona y porque otras no.
Las propiedades son ClientDataSet2 (ClientDataSet detalle): - IndexFieldNames: ID_TABLA1 - MasterFields: ID SQLDataSet1 (SQLDataSet detalle): - Al parametro le cambio el nombre de ID a ID_TABLA1 Como dije esto funciona rara vez, porque sino me genera el error que no hay valor para el parametro "ID_TABLA1" Saludos
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS |
#4
|
|||
|
|||
Hola...
De lo que te comenta Kipow, también debes tener en cuenta que primero debes grabar el registro maestro. Todo esto debes tenerlo dentro de una transacción, así si ocurre un error puedes revertir los cambios sin problema alguno... Saludos... |
#5
|
||||
|
||||
Hola maeyanes, si hago un ApllyUpdates en el maestro se hace también en los detalles, debido al tipo de conexión que tiene, y si intento hacer un ApplyUpdates en cl ClientDataSet detalle me genera otro error también por el tipo de conexión, igualmente si el registro ya existe en el maestro y quiero agregarle registros detalles para este me genera el error mencionado que da origen al problema.
Saludos
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema tabla Maestro-detalle en la q la pk de t.detalle formad por 2cods de la maes | akinom38 | Varios | 1 | 09-11-2007 19:27:44 |
Problema con maestro detalle | escullar | Impresión | 2 | 21-12-2005 09:53:01 |
Problema con Maestro-Detalle | AGAG4 | Firebird e Interbase | 8 | 11-09-2004 18:23:38 |
Problema con Maestro-Detalle | AGAG4 | Firebird e Interbase | 2 | 20-08-2004 15:51:14 |
Problema con maestro/detalle | joanajj | Conexión con bases de datos | 7 | 28-07-2003 18:52:42 |
|