También puede ser que estés registrando más de una vez el evento.
El OnShow se ejecuta cada vez que se muestra el formulario (si minimizas y vuelves a maximizarlo o si haces un Form.Hide; Form.Show
.
Quizás debas poner el registro de eventos en OnActivate.
También puede ser que se esté ejecutando el evento al mismo tiempo que haces un Close y el evento trate de hacer un Refresh.
Para probar puedes crear una variable global a la unidad
Código Delphi
[-]
var
TenerEnCuentaEventos : Boolean;
OnCreate
begin
TenerEnCuentaEventos := True;
end;
OnEvent
begin
if ((TenerEnCuentaEventos) and (EventName='ACTUALIZA_CLIENTES')) then
begin
Clientes.Refresh;
end;
end;
Consulta
begin
SQL := 'Select * from Clientes ORDER BY NOMBRE ASCENDING';
TenerEnCuentaEventos := False;
try
Clientes.CLose;
if pFIBTransaction1.InTransaction then pFIBTransaction1.CommitRetaining;
pFIBTransaction1.StartTransaction;
CLIENTES.SelectSQL.Clear;
CLIENTES.SelectSQL.Add(SQL);
CLIENTES.QSelect.ExecQuery;
pFIBtransaction1.CommitRetaining;
Clientes.Open;
finally
TenerEnCuentaEventos := True;
end;
end;