PDA

Ver la Versión Completa : borrar en detalle con ref en maestro


ebeltete
08-06-2007, 01:07:36
Hola, trabajo con Firdbird 2.0 y Delphi 5, tengo un a tabla maestro "clientes" y la table detalle "departamentos", tengo esta referencia:
ALTER TABLE clientes ADD CONSTRAINT FK_DEPTO FOREIGN KEY (cl_DEPTO) REFERENCES DEPARTAMENTOS (CODIGO) ON UPDATE CASCADE ON DELETE NO ACTION;

cuando borro un registro en la tabla departamentos con una referencia en la tabla clientes, no me muestra ningun error y lo borra, pero cuando cierro y abro nuevamente la aplicacion, el registro aparece, o sea que en definitiva no lo borra de la bbdd, como hago para que me muestre un mensaje de que ese registro tiene referencias en algun cliente? Lo hago con una consulta sql antes de borrar o mediante cascade o no action hay alguna manera que la firebird me lo impida respondiendome con un mensaje?

luisgutierrezb
08-06-2007, 03:10:34
pues lo que se me ocurre es hacer un trigger para el ondelete y verificar si tiene registros

rastafarey
08-06-2007, 19:59:42
Lo que no te muestre el error es algo raro lo probaste con ibexpert. Estoy 100% seguro que con ibexpert te debe salir un error de violacion de integridad referencial lo cual no te permite borrar el registro. Ahora si es desde algun lengua como delphi puede ser error de aplicaion mas no de firebird. Y la solucion par arreglar el lo dle mensaje ya que no querrar que lance un mensaje de fireebird sino uno tuyo.

crea un evento before delete

haces un select sobre cleintes donde poseea el departamento que se esta borrando (recuerdas usar old.campo y no new.campo) y si este es diferente de nulo lanzas la exception. Por seguraida a la variable que la vas a asignar el valor que devuelve el numero de registros le asignas nulo antes de asignarla.