
[RESUELTO] Trigger After Update
#1
Escrito 31 octubre 2010 - 07:36
Tengo una aplicacion que corre en varias maquinas a la vez y que se conectan a un servidor con firebird 2.1.3. Me gustaria que cada vez que efectue algun cambio en una de las aplicaciones, se refleje de manera automatica en las demas. He probado haciendo un refresh, luego de hacer un update, pero prefiero hacer algo del lado del servidor para no cargar el programa.
Gracias por adelantado.
#3
Escrito 31 octubre 2010 - 08:45
http://www.firebird.....php?storyid=35
NOTA : Ahora que todos los equipos Windows suelen llevar un cortafuegos personal (como mínimo llevaran el integrado en XP SP2), deberás recordar habilitar tu programa para que pueda recibir conexiones entrantes.
Saludos.
#4
Escrito 31 octubre 2010 - 08:59
crear un evento en mi caso seria cambios, algo como esto en el oncreate o en el onshow de mi formulario:
DMmonitorenred.ZIBEventAlerter1.Events.Add('cambios'); DMmonitorenred.ZIBEventAlerter1.RegisterEvents;
tendria que hacer esto:
procedure TDMmonitorenred.ZIBEventAlerter1EventAlert(Sender: TObject; EventName: String; EventCount: Integer; var CancelAlerts: Boolean); begin if EventName = 'cambios' then DMmonitorenred.ZQactivas.Refresh; end;
Con esto lograria que solo me refresque el query cuando se genere un evento y no que lo este haciendo a cada rato, hasta aqui si entiendo bien no hay problema.
Ahora bien, que debo poner en el trigger que voy a crear usando ibexpert?
El trigger se llamara ncambio.
#5
Escrito 31 octubre 2010 - 09:05
CREATE TRIGGER POST_NEW_REG FOR TABLA AFTER INSERT AS BEGIN POST_EVENT "cambios"; END

#6
Escrito 31 octubre 2010 - 09:20

#7
Escrito 31 octubre 2010 - 10:38
POST_EVENT 'cambios';

Con el punto y coma al final, además de que comillas simples en lugar de dobles.
#8
Escrito 31 octubre 2010 - 10:39
2. Trigger para la modificación de registros: CREATE TRIGGER CAMBIOS_EN_CLIENTE FOR CLIENTES AFTER UPDATE AS BEGIN POST_EVENT "CAMBIO_CLIENTE"; END
#9
Escrito 31 octubre 2010 - 10:40
#10
Escrito 31 octubre 2010 - 11:03
Hago estas preguntas porque el mismo componente tiene opciones de autoregister y para ponerle el nombre y decirle si esta registrado. Por estas razones no se si sea necesario especificar lo mismo otra vez.
Por otro lado recibi un error de memoria, pero lo estare reproduciendo mañana y poniendo la imagen en el foro, porque ya es justo que me acueste.
#11
Escrito 01 noviembre 2010 - 12:39
Yo lo tengo puesto en un lugar accesible desde cualquier formulario (tengo un DataModule específico para realizar la conexión a la base de datos). Y es en el constructor de este DM que registro todos los eventos que necesito.
Espero te sirva
Nos leemos
#12
Escrito 01 noviembre 2010 - 08:25
Te pregunto esto porque yo tenía un problema similar con Zeos 6.6.6 stable, puedes descargarte un archivo zip, con demos de Zeos para Lazarus en: http://sites.google....rogbs/downloads ahí hasta la parte de abajo hay un archivo denominado Zeos_Demos.zip; dentro de este existe una carpeta denominada <Event>; ahi hay un buen ejemplo, además existe otra carpetita denominada <update> ; y dentro un archivo denominado <ZIBEventAlerter.pas>; el cual necesitas reemplazar en tu instalación de Zeos además de volver a compilar lazarus para que surta efecto, de puedo decir que a mí me funcionó, además también aplica en instalaciones lilnux.
Saludos

#13
Escrito 01 noviembre 2010 - 03:44
Cadetill voy a probar como me dices y vamos a ver como funciona.
Gracias Fredycc voy a probar lo que me dices. La verdad es que en este caso estoy trabajando en la version que tengo para delphi con zeos 6.6.6 stable, pero como tengo el mismo programa en version lazarus, me va a servir muchisimo lo que has informado y los archivos del link que has puesto.
#14
Escrito 01 noviembre 2010 - 04:09
#15
Escrito 01 noviembre 2010 - 05:08

este es el error que me da cuando intento registrar el evento desde delphi.
lo hice como indica egostar en el link que indica wilson y tambien segun este LINK
TZIBEventAlerter (Add On only for Firebird and Interbase)
By using this component you are able to intercept events triggered by stored procedures of a Firebird
database and react to them. You only have to register the event's text (string) you want to react to in property
Events which is a stringlist. You can do this using objectinspector or inside the sourcecode. The event alerter
is activated by registering the listed events. To do this you should call the Registerevents method because
the Properties AutoRegister and Registered do not work properly. If you once have registered the events the
component is able to react to them. All events are unregistered (deleted) by calling method UnregisterEvents
and the event alertet is turned off.
Registration of events and "activation" of the event alerter:
:
EventAlerter.Events.Add ('Minimum Stock Level Reached');
EventAlerter.Events.Add ('Credit Limit Exceeded');
EventAlerter.RegisterEvents;
:
pero me sale este bendito error, alguien tiene alguna idea.
#16
Escrito 01 noviembre 2010 - 07:05

Perdón por la tardanza, acabo de comer, pues llegué del trabajo, pero ya estoy de vuelta.
Archivos adjuntos
#17
Escrito 02 noviembre 2010 - 06:42
#18
Escrito 02 noviembre 2010 - 04:47
He creado una aplicacion con un solo form donde pongo el zconnection y el sibeventalerter y desde que intento registrar el evento me da el error. voy a reproducirlo y te digo en que linea es que salta.
#19
Escrito 02 noviembre 2010 - 04:50

Salud OS
#20
Escrito 02 noviembre 2010 - 05:49

El problema definitivamente es con zeos. Para los eventos solo tengo que poner el zibeventalerter o hay que poner algun otro como complemento de este.
La verdad es que me gustaria resolverlo con zeos. Alguna idea?