FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Cancelar borrado
Como podria hacer un trigger en firebird 1.5 para que si el usuario intenta borrar un registro con un codigo X la base de datos no le deje borrarlo
Ej.: Quiero estar seguro de que el registro de una tabla con codigo 1 este siempre en esta y no pueda se borrado de ninguna manera, asi que si lo intentan borrar la base de datos deniege esta peticion |
#2
|
||||
|
||||
No conozco IB, pero lo que quieres hacer es un trigger de validación, la forma clásica es crear un trigger BEFORE FOR EACH ROW (antes de la ejecución y por cada fila) y poner una pregunta donde si se cumple cierta condición producir un error (exception).
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 27-04-2005 a las 14:48:16. |
#3
|
|||
|
|||
Yo lo uso tal cual lo explica delphi.com.ar.
Código:
CREATE EXCEPTION Facturas_NODELETE_E "ERROR SOLO SE PUEDE BORRAR LA ULTIMA"; SET TERM !! ; CREATE TRIGGER Facturas_BDT FOR Facturas BEFORE DELETE AS DECLARE VARIABLE AUX INTEGER; BEGIN SELECT MAX(num) FROM Facturas WHERE periodo=OLD.periodo AND serie=OLD.serie INTO AUX; IF (OLD.num < :AUX) THEN EXCEPTION Facturas_NODELETE_E; END !! SET TERM ; !! |
#4
|
|||
|
|||
Hola Foro,
Sobre el metodo que utilizas para permitir borrados unicamente sobre le ultimo registro, creo que no funcionaria para una aplicacion de multiples usuarios, en cuyo caso tendrias que colocar un campo a tu tabla con el nombre del usuario y cambiar el select a algo como: SELECT MAX(num) FROM Facturas WHERE periodo=OLD.periodo AND serie=OLD.serie and usuario = current_user INTO AUX; Tambien como las llaves primarias (por lo menos hasta la version de Firebird 1.0.3) se crean en orden ascendente, el rendimiento caeria en la medida que aumente el numero de registros en la tabla, deberias entonces crear un indice descendente (de mayor a menor) sobre la columna num.
__________________
Luis Fernando Buelvas T. |
#5
|
|||
|
|||
Gracias lbuelvas por tu apreciación.
Uhm!! Lo del usuario no valdría, pues sea quien fuere el que haga la factura, una vez "numerada" ya no se puede borrar si existe otra con numeración superior (legalmente no puede haber "vacios" entre facturas). Aún no me preocupa lo de multipuesto, pero tendré que arreglarlo para el futuro. Gracias. PD: Tomo nota de lo del indice. thx. |
#6
|
|||
|
|||
Gracias por contestar al final he conseguido hacer lo que queria creando unas excepciones tal y como decis de la siguiente manera:
Código:
CREATE EXCEPTION EXC_USUARIOS 'NO SE PUEDE BORRAR AL USUARIO 1'; SET TERM !!; CREATE TRIGGER BEF_DEL_USUARIOS FOR Usuarios BEFORE DELETE AS BEGIN IF (OLD.IDUSUARIO=1) THEN EXCEPTION EXC_USUARIOS; END!! SET TERM; !! |
|
|
|