Ir al contenido


Foto

[RESUELTO] Trigger After Update


  • Por favor identifícate para responder
23 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 07:36

Hola como estan

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.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 31 octubre 2010 - 08:21

Mirá este hilo, de pronto haya algo que te sirva.

Saludos
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 31 octubre 2010 - 08:45

Además de esa información, en firebird.com.mx (un sitio muy recomendable) tienes un buen artículo que describe esta programación con eventos.

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.
  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 08:59

Podria ser, pero segun entiendo, para usar esta idea de egostar, tendria que usar el zibeventalerter de zeos
crear un evento en mi caso seria cambios, algo como esto en el oncreate o en el onshow de mi formulario:


delphi
  1. DMmonitorenred.ZIBEventAlerter1.Events.Add('cambios');
  2. DMmonitorenred.ZIBEventAlerter1.RegisterEvents;



tendria que hacer esto:


delphi
  1. procedure TDMmonitorenred.ZIBEventAlerter1EventAlert(Sender: TObject;
  2.   EventName: String; EventCount: Integer; var CancelAlerts: Boolean);
  3. begin
  4. if EventName = 'cambios' then
  5. DMmonitorenred.ZQactivas.Refresh;
  6. 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.



  • 0

#5 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 31 octubre 2010 - 09:05

Es muy importante que en el trigger uses:



sql
  1. CREATE TRIGGER POST_NEW_REG FOR TABLA
  2. AFTER INSERT
  3. AS
  4.  
  5. BEGIN
  6.  
  7. POST_EVENT "cambios";
  8.  
  9. END

(y)


  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 09:20

gracias por responder a todos, Eso pensaba Fredycc pero me da el error de que no reconoce la variable cambios
Imagen Enviada
  • 0

#7 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 31 octubre 2010 - 10:38

Q tal luk2009, prueba entonces:

POST_EVENT 'cambios';

;)
Con el punto y coma al final, además de que comillas simples en lugar de dobles.
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 10:39

Hola a todos, el problema aparentemente esta en que le puse comillas dobles donde dice cambios. Pero resulta que en el documento que me indico Marc esta puesto asi


delphi
  1. 2. Trigger para la modificación de registros:
  2.  
  3. CREATE TRIGGER CAMBIOS_EN_CLIENTE FOR CLIENTES
  4.  
  5. AFTER UPDATE
  6.  
  7. AS
  8.  
  9. BEGIN
  10.  
  11. POST_EVENT "CAMBIO_CLIENTE";
  12.  
  13. END


  • 0

#9 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 10:40

Gracias Fredycc, ya me habia dado cuenta de ese error.
  • 0

#10 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 31 octubre 2010 - 11:03

Otra pregunta: cuales son los lugares correctos para ubicar el componente zibeventalerter de zeos: en el datamodule o en el formulario principal.  En cual evento es mejor registrar el evento: en el oncreate o en el onshow.

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.


  • 0

#11 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 01 noviembre 2010 - 12:39

Buenas,

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

  • 0

#12 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 01 noviembre 2010 - 08:25

Q tal luk2009, estas usando Zeos sobre Lazarus?

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  (y)
  • 0

#13 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 01 noviembre 2010 - 03:44

Gracias a todos por responder.
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.


  • 0

#14 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 01 noviembre 2010 - 04:09

Fredycc no esta la carpeta update.
  • 0

#15 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 01 noviembre 2010 - 05:08

Imagen Enviada

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.
  • 0

#16 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 01 noviembre 2010 - 07:05

Q extraño, bueno aquí te adjunto la parte de eventos del archivo mencionados, saludos. (y)

Perdón por la tardanza, acabo de comer, pues llegué del trabajo, pero ya estoy de vuelta.

Archivos adjuntos


  • 0

#17 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 02 noviembre 2010 - 06:42

Si puedes coloca el codigo y la linea donde te da ese error, por lo general sucede cuando hay objetos no creados
  • 0

#18 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 02 noviembre 2010 - 04:47

Eduarcol has utilizado el zibeventalerter? con delphi, si la respuesta es afrimativa, dime como te ha ido y como lo has hecho?

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.
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 noviembre 2010 - 04:50

Y ya probaste con IBX ? digo, para descartar que el problema esté en la base de datos ;)

Salud OS
  • 0

#20 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 02 noviembre 2010 - 05:49

Con IBX si funciona  Imagen Enviada

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?
  • 0




IP.Board spam blocked by CleanTalk.