Ver Mensaje Individual
  #11  
Antiguo 19-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
No necesitas el procedimiento almacenado. Con el disparador sobra:
Código SQL [-]
CREATE TRIGGER CI_CITAS_EVENT_NUEVA FOR CI_CITAS
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
 post_event 'ACT_CITAS'
end

En el mdoRegisterEvent, necesitas añadir el evento que quieres esperar, dado que, en la base de datos puedes lanzar muchos eventos, pero una ventana de tu programa solo quiere enterarse de uno de ellos:
Código Delphi [-]
// solo hace falta registrarlo 1 vez, por ejemplo, al crear el form

const CitaModificada = 'ACT_CITAS';


procedure TfCitas.FormCreate(Sender: TObject);
begin
with mdoevents1 do
begin
  Add(CitaModificada);

If Not MDOEvents1.Registered Then
   MDOEvents1.Registered := true;
end;

Como sabrás, el evento lanzado por el SGBBDD lo recogerá todas las aplicaciones delphi que esten accediendo a esa Base de datos, pero solo le llegará el mensaje a la ventana que tenga registrado dicho mensaje.

Como has visto, he definido una constante CitaModificada, es muy fácil equivocarse al escribir el string, y con una sola letra que varíe, delphi no recibirá dicho evento, y empezarás a creer que Firebird no funciona bien o le echas la culpa a MDO. Usando constantes, te aseguras de no cometer errores mecanográficos. Por el bien de tu salud mental, te lo recomiendo encarecidamente .

El evento mdoEventAlert1.OnEvent lo tienes bien definido, por ello no comento nada más.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 19-05-2007 a las 09:06:02.
Responder Con Cita