![]() |
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.... |
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...)
|
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 |
Cita:
Cita:
|
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