Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-03-2007
membrillo membrillo is offline
Registrado
 
Registrado: mar 2007
Posts: 5
Poder: 0
membrillo Va por buen camino
¿Cómo conocer algún dato de la tupla que ha producido el evento?

Hola amigos,

Estoy haciendo un servicio de alarmas con firebird, delphi y php, para lo cual estoy haciendo uso de los eventos que puedo generar con firebird. El caso es que ya sé capturar un evento, pero no sé cómo saber qué tupla produjo ese evento. Me explico: Tengo una tabla de alarmas en las que la aplicación php introduce datos de algún tipo de alarma. Con delphi ya logro saber cuándo se produce una alarma, pero no sé qué tupla la produjo. Lo que quiero saber por ejemplo es si introduzco una tupla en la base de datos que contenga (nombreAlarma, tipoAlarma, Descripción, identificador), cuando capturo con delphi el evento que se produce al introducir esta tupla, cómo puedo conocer los datos nombreAlarma, tipoAlarma, Descripción, identificador????

No sé si está claro. Si no lo teneis claro de lo que quiero, me lo comentais y lo intento explicar mejor.

Gracias por todo y saludos.
Responder Con Cita
  #2  
Antiguo 20-03-2007
membrillo membrillo is offline
Registrado
 
Registrado: mar 2007
Posts: 5
Poder: 0
membrillo Va por buen camino
Código Delphi [-]


procedure TDataModule1.IBEvents1EventAlert(Sender: TObject; EventName: string;
EventCount: Integer; var CancelAlerts: Boolean);
begin
if EventName='NEW_ALARM' then
*****************


end;



donde pongo ***********, ¿como sé cuáles son los datos que se han insertado para producir ese evento?

Creo que así está más claro
Responder Con Cita
  #3  
Antiguo 21-03-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Me imagino que te enteras que se cambio algo desde php al poner un evento dentro de un trigger... pon varios eventos:

Código SQL [-]
SET TERM ^^ ;
CREATE TRIGGER TR_ESTACUENTA FOR T_ADICIONALES_ABONOS ACTIVE AFTER UPDATE POSITION 0 AS
begin
  /* code */
  if (new.Campo1 <> old.campo1)
     POST_EVENT 'Evento1';
  if (new.Campo2 <> old.campo2)
     POST_EVENT 'Evento2';
  if (new.Campo3 <> old.campo3)
     POST_EVENT 'Evento1';
end
^^
SET TERM ; ^^
Responder Con Cita
  #4  
Antiguo 21-03-2007
membrillo membrillo is offline
Registrado
 
Registrado: mar 2007
Posts: 5
Poder: 0
membrillo Va por buen camino
Ya, pero no es a eso a lo que me refiero. Por ejemplo, Tengo un trigger AFTER INSERT que lo que hace es un post_event "NEW_ALARM". Si yo por ejemplo inserto una alarma con los siguientes datos (idAlarma, nombreAlarma, EquipoDeAlarma, MotivoDeAlarma) que son realmente (3, 'Alarma por Temperatura, 'Frigorífico 2', 'La temperatura ha bajado de 3 grados') , con el delphi yo puedo saber que se ha introducido una tupla, pero ¿cómo sé yo que la tupla que ha producido el evento es (3, 'Alarma por Temperatura, 'Frigorífico 2', 'La temperatura ha bajado de 3 grados')?

Gracias y saludos.
Responder Con Cita
  #5  
Antiguo 21-03-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Código SQL [-]
select first 1 * from laTabla order by idAlarma Desc
Responder Con Cita
  #6  
Antiguo 21-03-2007
membrillo membrillo is offline
Registrado
 
Registrado: mar 2007
Posts: 5
Poder: 0
membrillo Va por buen camino
Gracias RONPABLO. Eso lo había pensado, pero si se introducen 2 tuplas casi al mismo tiempo, ¿no habrá problemas de concurrencia?
Responder Con Cita
  #7  
Antiguo 21-03-2007
membrillo membrillo is offline
Registrado
 
Registrado: mar 2007
Posts: 5
Poder: 0
membrillo Va por buen camino
Además, uno de los campos de la alarma es si está activa, de forma que cuando la alarma no está activa (un update) también tengo que saber qué alarma ya no está activa, y eso creo que no lo puedo saber con un select.
¿No hay alguna forma de pasar parámetros al POST_EVENT?
Responder Con Cita
  #8  
Antiguo 21-03-2007
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
los eventos de firebird no pueden tener parametros, por lo menos hasta 1.5.x que es lo que yo conozco, pero dudo que que se pueda porque si uno hace el post dos veces del mismo evento y después hace un commit, ahí recien llegan los eventos a los clientes pero llega una sola vez por cada evento, si tuvieran parámetros, ¿cúal llegaría?

llendo a lo práctico, creo que te las vas a tener que rebuscar con una tabla auxiliar y mezclado con un mecanismo de auditoria, cada vez que hay una modificación puedes postearlo en una tabla con el ID de transacción que la realizo, en que tabla, que tipo de operación fue y que clave primaria afecto. el cliente que se hace cargo de eso lo puede borrar

a ver si alguien tiene una idea mejor
suerte
Responder Con Cita
  #9  
Antiguo 25-05-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Sigo en la misma línea, de hecho:
Código Delphi [-]
procedure TDataModule1.IBEvents1EventAlert(Sender: TObject; EventName: string;
EventCount: Integer; var CancelAlerts: Boolean);
begin
se ve que puede haber ocurrido una acumulación del mismo evento, por tanto es imposible saberlo.

La idea del compañero pvizcay me parece más que acertada.

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



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 conocer el ultimo valor autonumerico creado de una tabla Tama MS SQL Server 8 16-06-2004 19:14:30
Refrescar sólo si se han producido cambios Sirkius Conexión con bases de datos 3 08-06-2004 19:05:22
Algun soft como Delphi? crackman Varios 5 15-10-2003 16:12:30
Se ha producido la excepcion unkhow sw 0xc00000fd Cabanyaler SQL 2 22-09-2003 09:13:12
Como conocer Path a mi programa sin usar Getcurrentdir rrf Varios 1 24-08-2003 22:13:59


La franja horaria es GMT +2. Ahora son las 23:31:18.


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