Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 06-11-2006
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 24
sur-se Va por buen camino
Hola. Gracias por la respuestas, pero ninguna entiendo que es la solución "correcta" ( desde mi punto de vista claro) , es decir, voy a tener que parchear y cambiar por algo que entiendo debería funcionar bien, que no es más que conjugar reglas de claves referenciales con triggers.

Yo entiendo que el servidor Firebird debería funcionar así en este caso:
- Quiero borrar un registro de la tabla principal. Veo si hay tablas que tengan alguna clave referencial a la tabla principal.
- Primero borro los registros (o pongo a nulo dependiendo de la configuración de las claves referenciales) de las tablas asociadas.
- Al efectuar esta operación sobre las tablas asociadas, se disparan sus triggers correspondientes.
- Una vez finalizado con las tablas asociadas, borro el registro de la tabla principal.
- Se completa la transacción.

... Pero por lo que veo, estoy equivocado .. porque parece que primero borra el registro de la tabla principal (dejando rotos los enlaces a las claves referenciales) y luego ataca a las tablas asociadas por la FK, y por eso tengo y o el problema ...

En la pregunta he simplificado bastante el proceso a dos tablas, pero la realidad es que son mas tablas las que dependen de la misma cabecera, por lo que el on-delete-cascade viene estupendamente, así como el disparo de los triggers after delete de la línea para quitar las existencias. De hecho, como comentaba en el post anterior, da igual que lo pase de after a before por que es un trigger de la línea no de la cabecera, pero tampoco lo puedo pasar al before de la línea porque se realizan sumas y acumulados con las líneas que quedan y debe realizarse cuando la línea ya está borrada y no antes.

Pero en fin, si así es como funciona pues tendré que cambiar la programación. Lo más sencillo creo que es borrar las tablas asociadas por la clave referencial con un trigger en el before delete de la cabecera, como apuntais en el post anterior.

Bueno, pues nada, eso es lo que hay. Gracias a todos por la ayuda.
Salu2.

Última edición por sur-se fecha: 06-11-2006 a las 13:56:20.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ocultar código de Stored Procedures y Triggers en FireBird... jncrls Firebird e Interbase 4 08-01-2007 16:51:52
efecto disparo de los juegos edusus Varios 15 19-04-2006 03:10:12
Firebird 1.0.3 -- Recusividad de Triggers y Procedimientos Almacenados jverasobino Firebird e Interbase 1 27-12-2004 18:00:58
Problemas Triggers Firebird ISCOPYME Firebird e Interbase 2 29-06-2004 22:05:12
[Firebird 1.5] DSQL en procedimientos almacenados y triggers kinobi Firebird e Interbase 0 06-08-2003 20:50:27


La franja horaria es GMT +2. Ahora son las 03:13:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi