Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
IBEvents no captura POST_EVENT Firebird 2.5 ?

Hola gente

Haciendo unas pruebas con Firebird 2.5, Delphi7 e IBX, veo que aparentemente el componente IBEvents ni se entera de que se disparó POST_EVENT.

Campos de TABLA1:
Código:
ID INTEGER
NOMBRE VARCHAR(10)
Código SQL [-]
CREATE TRIGGER EV_TABLA1_MODIFIED FOR TABLA1
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 1
AS
BEGIN
  POST_EVENT 'TABLA_MODIFIED';
  INSERT INTO TABLALOG (ID, NOMBRE) VALUES(NEW.ID, NEW.NOMBRE);
END
TABLALOG tiene los mismos campos que TABLA1 y está para verificar el disparo del trigger. Aunque nunca pensé que fuera eso, no quise descartar ninguna posibilidad.

Luego en Delphi:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  IBDatabase1.Connected:= True;
  IBEvents1.Events.Clear;
  IBEvents1.Events.Add('EV_TABLA1_MODIFIED');
  IBEvents1.RegisterEvents;
  IBDataSet1.Open;
end;

procedure TForm1.IBEvents1EventAlert(Sender: TObject; EventName: String;
  EventCount: Integer; var CancelAlerts: Boolean);
begin
  ShowMessage(EventName);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  n: Integer;
begin
  n:= Random(10000)+1;
  IBDataSet1.Append;
  IBDataSet1.FieldByName('ID').AsInteger:= n;
  IBDataSet1.FieldByName('NOMBRE').AsString:= 'Registrado '+IntToStr(n);
  IBDataSet1.Post;
  IBTransaction1.Commit;
end;

procedure TForm1.IBDataSet1AfterDelete(DataSet: TDataSet);
begin
  IBTransaction1.Commit;
end;
...
Usando Trace Into, verifiqué que jamás entra al evento OnEventAlert. En la tabla de log queda perfectamente registrado el disparo del mismo.

¿ A alguién le ha ocurrido o sabe algo al respecto ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 05-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No lo he probado con la v2.5, todavía sigo con la v2.1 pero prueba a quitar el 'or update or delete' y deja solamente el 'insert', lo digo porque, por ejemplo, en el 'after delete' no se puede usar el 'new.' y entonces puede que esté fallando el trigger aunque no indique ningún error.
Código SQL [-]
CREATE TRIGGER EV_TABLA1_MODIFIED FOR TABLA1 
ACTIVE AFTER INSERT /* OR UPDATE OR DELETE */ POSITION 1 
AS 
BEGIN   
  POST_EVENT 'TABLA_MODIFIED';   
  INSERT INTO TABLALOG (ID, NOMBRE) VALUES(NEW.ID, NEW.NOMBRE);  /* el new. no se puede usar en el after delete */ 
END
También puedes probar:
Código SQL [-]
CREATE TRIGGER EV_TABLA1_MODIFIED FOR TABLA1 
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 1 
AS 
BEGIN   
  POST_EVENT 'TABLA_MODIFIED';
  if (inserting) then
    INSERT INTO TABLALOG (ID, NOMBRE) VALUES(NEW.ID, NEW.NOMBRE); 
  else
  if (updating) then
    loqueseaalupdating;
  else
  if (deleting) then
     loqueseaaldeleting;
END

A ver qué resultado obtienes.
Responder Con Cita
  #3  
Antiguo 05-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Casimiro.

Gracias por tu respuesta, tienes razón con el DELETE y NEW probé con el código que adjuntaste pero IBEvents tampoco captura el evento.

Tomando en cuenta lo que sugeriste y para simplificar, hice la prueba sólo con INSERT de este modo:
Código SQL [-]
CREATE TRIGGER EV_TABLA1_MODIFIED FOR TABLA1
ACTIVE AFTER INSERT POSITION 1
AS
BEGIN
  POST_EVENT 'TABLA_MODIFIED';
END
Directamente quité la inserción (ya está claro que Firebird dispara el trigger sin problemas), pero nada... sigue sin entrar a OnEventAlert.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 06-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues estoy haciendo unas pruebecitas y tampoco funciona con la 2.1 aunque no uso los IBX, sino los FIBplus que no tienen, creo, componentes para eventos de la BD.
Puede ser que el IBevents ya no sea compatible con las últimas versiones de firebird.
Responder Con Cita
  #5  
Antiguo 06-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Puede ser que el IBevents ya no sea compatible con las últimas versiones de firebird
Si, creo que eso debe estar pasando...

Me voy a meter en camisa de once varas e investigar un poco sobre la api de Firebird para ver como capturar los eventos a ver si se le puede buscar la vuelta... Realmente sería una lástima desperdiciar esa capacidad.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 06-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A ver qué descubres
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Como usar el componente IbEvents? MartinS OOP 11 07-05-2012 17:25:07
Post_event y cargas masivas Young Firebird e Interbase 4 22-06-2011 17:50:55
ibEvents santiago14 Firebird e Interbase 1 27-10-2007 05:27:33
IBEvents en remoto Jack Conexión con bases de datos 0 23-08-2005 14:35:34
POST_EVENT con parametros gendelphi Firebird e Interbase 1 13-12-2003 01:18:26


La franja horaria es GMT +2. Ahora son las 21:58:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi