CREATE TRIGGER (Comando)
Crea un desencadenador Delete, Insert o Update para una tabla.
CREATE TRIGGER ON TableName FOR DELETE | INSERT |
UPDATE AS lExpression
Parámetros
TableName
Especifica la tabla de la base de datos actual para la que se crea el desencadenador.FOR DELETE | INSERT | UPDATE
Especifica el tipo de desencadenador que crea Visual FoxPro.Si ya existe un desencadenador del tipo que especifica y SET SAFETY está establecido en ON, Visual FoxPro le preguntará si desea sobrescribir el desencadenador existente. Si SET SAFETY está establecido en OFF, el desencadenador existente se sobrescribirá automáticamente.
AS lExpression
Especifica la expresión lógica que se evalúa cuando se produce el desencadenador. lExpression puede ser una función definida por el usuario o un procedimiento almacenado que devuelve un valor lógico. MODIFY PROCEDURE crea procedimientos almacenados para una tabla.La función definida por el usuario o el procedimiento almacenado pueden utilizar AERROR( ) para determinar el nombre de la tabla para el que se ha producido el desencadenador y el tipo de desencadenador.
Si lExpression da como resultado verdadero (.T.), se ejecuta el comando o el evento que ha producido el desencadenador.
Si lExpression da como resultado falso (.F.), no se ejecuta el comando o el evento que ha producido el desencadenador. Si está en vigor un procedimiento ON ERROR, se ejecutará el procedimiento ON ERROR en lugar del comando o el evento. Si no está vigente un procedimiento ON ERROR, no se ejecutará el comando o el evento y Visual FoxPro generará un mensaje de error.
Observaciones
Utilice CREATE TRIGGER para interceptar eventos que hacen que se eliminen, agreguen o cambien los registros de una tabla. Los desencadenadores Delete, Insert o Update sólo pueden crearse para una tabla que se ha agregado a una base de datos. Utilice CREATE DATABASE para crear una base de datos, y ADD TABLE para agregar una tabla a una base de datos.
Las listas siguientes describen los eventos que hacen que se produzca un desencadenador Delete, Insert o Update.
Desencadenador Delete
- Se ejecuta DELETE.
- Se marca un registro para eliminar desde el menú Tabla de una ventana Examinar o Editar.
- Observe que si ejecuta ZAP, no se activa el desencadenador Delete.
Desencadenador Insert
- Se ejecuta APPEND FROM.
- Se ejecuta APPEND FROM ARRAY.
- Se ejecuta APPEND BLANK.
- Se anexa un registro desde el menú Tabla de una ventana Examinar o Editar.
- Se ejecuta IMPORT.
- Se ejecuta INSERT – SQL.
- Se ejecuta RECALL.
- Se desmarca un registro en el menú Tabla de una ventana Examinar o Editar.
Desencadenador Update
- Se ejecuta GATHER.
- Se ejecuta REPLACE.
- Se ejecuta REPLACE FROM ARRAY.
- Se ejecuta UPDATE – SQL.
- Otro evento que causa que se modifique un registro, por ejemplo, cuando un formulario cambia el contenido de un campo.
Las reglas siguientes se aplican a desencadenadores creados con CREATE TRIGGER:
- No es posible ejecutar INSERT para una tabla con un desencadenador. Sin embargo, puede utilizarse INSERT - SQL.
- Al ejecutar PACK no se producen desencadenadores.
- Al ejecutar ZAP no se produce un desencadenador Delete.
- No se producen desencadenadores si se actualiza un registro marcado para eliminar.
- Es posible que un desencadenador no se produzca inmediatamente, según el modo actual de almacenamiento en búfer:
Si está activo el almacenamiento de tablas en búfer, se producirá el desencadenador Update cuando se ejecute TABLEUPDATE( ) y se actualizará cada registro de la tabla almacenado en búfer.
Ejemplo
El ejemplo siguiente crea un desencadenador Update que impide escribir valores mayores de 50 en el campo maxordamt
de la tabla customer
. Se genera un mensaje de error cuando se ejecuta el primer comando REPLACE ya que el valor del campo maxordamt
es mayor de 50. El segundo comando REPLACE no genera un error porque el valor del campo maxordamt
es menor o igual que 50.
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'data\testdata')
USE customer && Open customer table
* Set trigger on maxordamt field to fail with values <= 50
CREATE TRIGGER ON customer FOR UPDATE AS maxordamt <= 50
ON ERROR && Restore the system error handler
WAIT WINDOW "Press a key to test trigger with value of 60"+CHR(13);
+"When you get the error message, press Ignore."
REPLACE maxordamt WITH 60 && Displays an error message
? maxordamt
WAIT WINDOW "Press a key to test with value of 50."
REPLACE maxordamt WITH 50 && Value is accepted
? maxordamt
DELETE TRIGGER ON customer FOR UPDATE && Remove the trigger
Vea también
ADD TABLE | AERROR( ) | CREATE DATABASE | DELETE TRIGGER | DISPLAY DATABASE | LIST DATABASE | OPEN DATABASE