Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2014
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Borrado con integridad referencial

Hola estimados, tengo el siguiente problema:
Estoy borrando datos de una tabla padre que tiene relacionada una tabla hija, dicha tabla hija tiene como foreign key el campo clave de la tabla padre(que hace la relación), como existe integridad referencial entre las tablas primero borro los datos de la tabla hija y después del padre, para no generar un error de violación, ambos procesos se ejecutan bajo una misma transacción, pero en dos procedimientos almacenados distintos(uno borra los hijos y el otro borra el padre). El problema es que aun borrando los hijos primero al borrar el padre, me envía un error de violación de clave foranea. Bajo mi lógica si borro primero los hijos y después el padre esto no debería ocurrir a menos que la transacción no este leyendo el borrado efectuado. Uso Firebilrd 2.5 y componentes FireDac para el acceso a los datos y transacciones.

Espero me puedan ayudar, gracias...
Responder Con Cita
  #2  
Antiguo 19-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lo lógico, si emite un error de integridad referencial es que... haya un error de integridad referencial. Revisa mejor el código y síguelo paso a paso.
Responder Con Cita
  #3  
Antiguo 19-12-2014
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Casimiro, es evidente que es un error de integridad referencial...he revisado mi código varias veces y no veo problema en el. Déjame cambiar un poco la pregunta inicial, ya que creo que el error va por el lado de la transacción. Si ejecuto el borrado de la tabla hijo bajo la misma transacción que ejecuto el borrado de la tabla padre....la tabla padre se entera de que he borrado los hijos...obviamente todo antes de realizar el commit, ya que todo ocurre en una sola transacción.
Responder Con Cita
  #4  
Antiguo 19-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Así debe ser, efectivamente.
Responder Con Cita
  #5  
Antiguo 19-12-2014
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Casimiro, podrías ser un poco mas explicito..
Responder Con Cita
  #6  
Antiguo 19-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo, es que no has hecho ninguna pregunta
Responder Con Cita
  #7  
Antiguo 19-12-2014
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Me refiero a que seas mas explicativo con tu comentario:
Cita:
Así debe ser, efectivamente.
Estas afirmando que esto es correcto:
Cita:
Si ejecuto el borrado de la tabla hijo bajo la misma transacción que ejecuto el borrado de la tabla padre....la tabla padre se entera de que he borrado los hijos..???
nose si me hago entender...
Responder Con Cita
  #8  
Antiguo 19-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, correcto, porque están en la misma transacción.
Aunque si quieres, también puedes borrar los datos de la tabla hija. Confirmar la transacción. Borrar de la tabla padre. Confirmar otra transacción.
Responder Con Cita
  #9  
Antiguo 22-12-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo y por que no dejas a Firebird que se encarge de ese trabajo...

Código SQL [-]
ALTER TABLE TABLA_HIJA ADD CONSTRAINT FK_TABLA_PADRE FOREIGN KEY (ID_PADRE) REFERENCES TABLA_PADRE (ID_PADRE) ON DELETE CASCADE ON UPDATE CASCADE

Así cada vez que borres un registro padre el borrado de sus hijos lo hará firebird...

Saludos cordiales
Responder Con Cita
  #10  
Antiguo 22-12-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.257
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cloayza Ver Mensaje
... y por que no dejas a Firebird que se encarge de ese trabajo...
Eso es lo ideal.
Responder Con Cita
  #11  
Antiguo 23-12-2014
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Cita:
Amigo y por que no dejas a Firebird que se encarge de ese trabajo...
Lo voy a probar y les comento...
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
integridad referencial Pollo2004 Varios 2 04-09-2008 22:10:24
integridad referencial Kamael Varios 3 28-01-2008 10:10:56
Integridad Referencial seara2005 Firebird e Interbase 6 15-05-2006 07:58:29
¿ Integridad referencial ? Turia MySQL 1 25-01-2006 14:59:33
Integridad Referencial pablo Conexión con bases de datos 3 03-01-2004 15:02:53


La franja horaria es GMT +2. Ahora son las 00:56:17.


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