FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Error Foreyng key en Master-Detail
Hola a todos,
hace un tiempo que vengo aprendiendo con Firebird, y ahora me llego el turno de las tablas maestro-detalle. Bien el caso es que no sé como evitar el error "violation of FOREYNG KEY constraint". Esto realizando las pruebas con la siguiente base de datos:
He creado un formulario con el DBEdit para el campo NOMBRE de la tabla Master, y un DBGrid para la tabla Lineas. Las tablas tienen la propiedad CachedUpdates activada. En algún sitio lei que daba problemas al actualizar si la propiedad DataSource de la tabla subordinada 'detalles' estaba asisgnada en el momento del post, así que en el evento click del botón grabar hay el siguiente código:
El código del DataModule son los siguiente:
¿Puede alguien orientarme dónde estoy fallando, o que puedo hacer para solucionar el error "violation of FOREYNG KEY constraint"? Saludos |
#2
|
|||
|
|||
Una pregunta, en el archivo MASTER ¿ya tienes datos?
Por lo poco que he visto si no exiten datos en MASTER te puede enviar un error porque no encuentra la referencia al momento de grabar datos en LINEAS. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#3
|
||||
|
||||
MASTER viene a ser por ejemplo la tabla FACTURAS, con sus respectivas líneas.
Con Paradox, puedo generar en el mismo formulario tanto la cabecera de MASTER (o Facturas si preferis), e ir añadiendo registros en LINEAS, todo ello con CachedUpdated activado. Al hacer un Post con Paradox funciona sin ninguna queja ... pero con Firebird no es lo mismo. Os adjunto los fuentes, está realizado en Delphi 5 profesional. Gracias |
#4
|
||||
|
||||
Hola morta71!
Si estás utilizando una transacción con Interbase, supongo que no será necesario por lo pronto usar actualizaciones en Caché. Olvidando un poco ese detalle, ¿quién te garantiza que dentro de la transacción actual, se guardan primero los cambios en la tabla maestro y después los cambios en la tabla detalle?. Por ejemplo, si la tabla maestro estuviera dentro de su propia transacción y la tabla detalle en otra, tu podrías determinar el orden en el cuál se aplican los cambios usando primero Commit en el maestro y después en el detalle. Es probable que de la manera que lo haces actualmente primero se intentar guardar los registros del detalle y no encuentra el registro del maestro simplemente porqué aún no han sido guardados. Saludos |
#5
|
||||
|
||||
Hola Héctor, lo que me comentas tiene sentido, pero yo lo que quiero es que se grabe todo en una misma transacción. Es decir, que si falla al grabar en LINEAS no se actualice MASTER.
Sinembargo, lo que me comentas puedo probrarlo. Sería algo así como realizar una transacción dentro de otra, es decir Transaccion1 que englobaría a MASTER y LINEAS, y Tansaccion2 que se refiere sólo a la tabla MASTER. De ésta manera realizo primero un Commit en Transaccion2 y después el Commit en Transaccion1. Si en Transaccion1 hay algun fallo, supongo que en el Rollback deshace también Transaccion1??????? Lo probaré a ver que sucede. Gracias |
#6
|
||||
|
||||
Yo no veo el sentido de utilizar dos transacciones diferentes. Como bien dice morta71, si no se graban LINEAS, para qué actualizar MASTER.
A mi me funciona sin problema, al menos en INTERBASE. Lo que si hay asegurarse en cualquier caso es que hagas un POST de MASTER antes de insertar una nueva línea en LINEAS. Lo que comentas acerca de desasignar el DataSource antes del Post, yo no lo hago nunca, y no tengo problemas.
__________________
Piensa siempre en positivo ! Última edición por gluglu fecha: 31-03-2007 a las 14:24:47. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Dá error "Master has detail records" cuando no debería darlo! | JuanBCT | Tablas planas | 3 | 06-08-2005 03:48:37 |
DBLookupComboBoxs Master/Detail o Detail/Master | yusnerqui | OOP | 5 | 29-07-2005 18:40:20 |
master/detail, imprimiendo master en cada hoja | acalderonr | Impresión | 4 | 29-11-2003 14:46:07 |
interbase:¿como crear un master-detail-detail? | ElSanto24 | Firebird e Interbase | 2 | 22-10-2003 10:24:45 |
Master/Detail/Detail/Detail/etc... | hgiacobone | Tablas planas | 2 | 24-07-2003 17:20:31 |
|