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 26-09-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
Exclamation 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
Responder Con Cita
  #2  
Antiguo 26-09-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
En el evento OnNewRecord del dataset detalle debes de asignarle la llave foranea (la del maestro).

PD. Que buena explicacion.
Responder Con Cita
  #3  
Antiguo 26-09-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 26-09-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
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...
Responder Con Cita
  #5  
Antiguo 26-09-2008
Avatar de totote
totote totote is offline
Miembro
 
Registrado: oct 2006
Posts: 150
Poder: 18
totote Va por buen camino
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
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
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


La franja horaria es GMT +2. Ahora son las 21:42:04.


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