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