Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Borrar Registros relacionados (https://www.clubdelphi.com/foros/showthread.php?t=15723)

senpiterno 03-11-2004 08:17:58

Borrar Registros relacionados
 
Hola amigos...

Mi pregunta es la siguiente....es posible borrar con una sentencia SQL un registro y sus relaciones con otras tablas esclavas, es decir si borramos por ejemplo el registro que hace referencia a una factura, podemos dentro de la misma sentencia SQL borrar tambien el detalle que tenga esta factura en otras tablas (obviamente enlazadas por el campo clave de la tabla maestra). Algo asi como hacer un join entre las tablas relacionadas con el registro a borrar dentro de una sola sentencia detele de SQL.
Y si es posible efectuarlo, se puede implementar dicha sentencia SQL dentro
de la propiedad DeleteSQL de un DataSet.

Gracias por cualquier ayuda

Saludos....

Neftali [Germán.Estévez] 03-11-2004 09:28:14

Esa información que tú comentas se debe definir en las relaciones entre tablas (CONSTRAINTS), no en la sentencia SQL; No comentas qué Base de Datos utilizas, pero por lo general es así (no se si habrá alguna excepción, pero yo no la conozco).

En el ejemplo que tú comentas, cuando defines el constraint entre la tabla factura y sus relacionadas deberás decir si deseas borrados en cascada (también puedes hacerlo con los UPDATES), de forma que cuando borras una factura se borrarán sus relacionadas, pero no es una cosa que se define en cada sentencia SQL, sino que es un comportamiento para todos los registros de esa tabla.

En SQLServer, por ejemplo, al definir el constaint podrías añadir lo siguiente:

(extraído de la ayuda...)
Código SQL [-]
FOREIGN KEY REFERENCES ref_table ref_column
            [ ON DELETE { CASCADE | NO ACTION } ] 
            [ ON UPDATE { CASCADE | NO ACTION } ]

senpiterno 03-11-2004 18:57:41

Gracias amigo Neftali por tu respuesta, efectivamente en los CONSTRAINTS de las tablas relacionadas tengo definidos el borrado y actualizado en cascada, para cuando uno de los registros maestros sufre algun cambio (delete,edit). Mi pregunta iva enfocada a si en la sentencia delete (previamente informada la propiedad DeleteSQL) de un dataset, se podia incluir el borrado de registos de mas de una tabla (cuando existen relaciones entre estas).
Por cierto que en teoria, es el sevidor el que se encarga de borrar en cascada cuando se elimina un registro maestro que tenga relaciones en otras tablas. Pero aqui me asalta otra duda, como saber si efectivamente ese borrado en cascada se efectuo exitosamente, o es que si ocurre algun error o inconveniente durante el borrado en cascada, se cancela la eliminacion completa arrojando una excepcion.....
Como Base de datos utilizo Interbase 6.0 y componentes IBX para el acceso a datos, mas explicitamente Dataset

Neftali [Germán.Estévez] 04-11-2004 10:31:33

Cita:

Empezado por senpiterno
... a si en la sentencia delete (previamente informada la propiedad DeleteSQL) de un dataset, se podia incluir el borrado de registos de mas de una tabla (cuando existen relaciones entre estas).

Creeo que en la sentencioa SQL no vas a poder hacerlo (en una única).

Cita:

Empezado por senpiterno
......como saber si efectivamente ese borrado en cascada se efectuo exitosamente, o es que si ocurre algun error o inconveniente durante el borrado en cascada, se cancela la eliminacion completa arrojando una excepcion...

Bueno, supongo que ese borrado en cascada se efectua utilizando transacciones y "quiero creer" que si por alguna razón el borrado falla no se dejan cosas a medias, si alguien lo sabe seguro que lo confirme (ésto es una suposición); Si no es así yo realizaría el borrado en cascada manualmente utilizando una transacción de forma que el proceso se realize completo o no se haga.


La franja horaria es GMT +2. Ahora son las 06:32:45.

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