Hola gente
Haciendo unas pruebas con Firebird 2.5, Delphi7 e IBX, veo que aparentemente el componente
IBEvents ni se entera de que se disparó
POST_EVENT.
Campos de TABLA1:
Código:
ID INTEGER
NOMBRE VARCHAR(10)
Código SQL
[-]
CREATE TRIGGER EV_TABLA1_MODIFIED FOR TABLA1
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 1
AS
BEGIN
POST_EVENT 'TABLA_MODIFIED';
INSERT INTO TABLALOG (ID, NOMBRE) VALUES(NEW.ID, NEW.NOMBRE);
END
TABLALOG tiene los mismos campos que TABLA1 y está para verificar el disparo del trigger. Aunque nunca pensé que fuera eso, no quise descartar ninguna posibilidad.
Luego en Delphi:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
IBDatabase1.Connected:= True;
IBEvents1.Events.Clear;
IBEvents1.Events.Add('EV_TABLA1_MODIFIED');
IBEvents1.RegisterEvents;
IBDataSet1.Open;
end;
procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;
EventCount: Integer; var CancelAlerts: Boolean);
begin
ShowMessage(EventName);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
begin
n:= Random(10000)+1;
IBDataSet1.Append;
IBDataSet1.FieldByName('ID').AsInteger:= n;
IBDataSet1.FieldByName('NOMBRE').AsString:= 'Registrado '+IntToStr(n);
IBDataSet1.Post;
IBTransaction1.Commit;
end;
procedure TForm1.IBDataSet1AfterDelete(DataSet: TDataSet);
begin
IBTransaction1.Commit;
end;
...
Usando
Trace Into, verifiqué que jamás entra al evento
OnEventAlert. En la tabla de log queda perfectamente registrado el disparo del mismo.
¿ A alguién le ha ocurrido o sabe algo al respecto ?
Saludos.