Ver Mensaje Individual
  #8  
Antiguo 12-02-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 21
StartKill Va por buen camino
Hola, subzero....

No soy buen profesor pero tratare de explicarme...

Lo trigger se desencadenan 'ejecutan' en el servidor cuando haces un cambio en las tablas de tu base de datos como es añadir, modificar, eliminar.

La idea es que el servidor envie un mensaje a los clientes cuando suceda dicho cambio, hay dos oportunidades que son: "un antes de" y "un despues de" (before/after), la idea es utilizar un despues de la actividad.

CREATE TRIGGER DPTO_AI FOR DPTO ACTIVE
AFTER DELETE POSITION 0
AS
BEGIN
POST_EVENT 'DEL_DPTO';
END


Estas lineas envian un mensaje a los clientes indicando que hay han borrado un registro en la tabla "dpto", la frase 'DEL_DPTO' es arbitraria dale el nombre que te guste(que sena descriptivos), en los clientes debe haber un componente "IBEvents" y tenes la oportunidad de saber que paso en el servidor de acuerdo al mensaje que enviaste.

En tu programa debes registrar los eventos que vas ha capturar, lo puedes hacer en el momento de mostrar tu formulario.

procedure TFrmRefe.FormShow(Sender: TObject);
begin
IBEvents1.Events.Add('DEL_DPTO');
IBEvents1.Events.Add('UPD_DPTO');
IBEvents1.Events.Add('INS_DPTO');
IBEvents1.RegisterEvents;
end;


No olvides que cuando termines desactivar los eventos

procedure TFrmRefe.FormDeactivate(Sender: TObject);
begin
IBEvents1.UnRegisterEvents;
end;


Bueno, parece que vamos bien... pero no queda alli, hay que atrapar las "señales" del servidor, como?,

Facil... en tu componente IBEvents hay un evento "OnEventAlert", alli hay un parametro "EventName" donde tendras el nombre arbitrario que pusiste (POST_EVENT 'DEL_DPTO'),

Alli elijes la accion a realizar, refrescas, avisas un cambio... lo que gustes, personalmente en mi formulario de tablas referenciales tengo un boton que dice refrescar y cuando sucede un evento este boton cambia de color del caption a ROJO y el usuario sabe que hay un cambio y necesita refrescar.;


procedure TFrmRefe.IBEvents1EventAlert(Sender: TObject;
EventName: String; EventCount: Integer; var CancelAlerts: Boolean);
begin
BitBtn1.Font.Color:=clRed;
end;


Ah, me olvidaba este evento tambien se ejecutara cuando hagas el cambio en el mismo cliente... osea: En un cliente haces un cambio y es normal que los demas clientes sepan lo que ha pasado "pintando el boton rojo" pero el cliente que hizo la modificacion tambien se pinta el boton, entonces debes controlar esa chispita, como?, tarea para Ud.

Bueno, espero haber sido de ayuda....

Cuentame como te fue, estamos para ayudarnos..

Your Friend

StartKill
Lima-Perú
Responder Con Cita