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 12-11-2008
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Question Notificación de Cambios

Hola a todos:
Trabajo con D5, FibPlus y Firebird 2
He diseñado un pequeño programa para familiarizarme con firebird y lo que quiero conseguir es lo siguiente:

Ejemplo:
El PC1 edita para cambiar el registro 4 del fichero de Articulos.
Mientras lo cambia y no lo cambia, el PC 2 edita tambien el registro 4 del mismo fichero de Articulos y le da a grabar antes que el PC1.
Evidentemente el PC1 no se entera de los cambios que ha hecho el PC2 y cree que los suyos son los correctos.

Tengo definido un EventAlerter (del FibPlus) que salta y comunica al PC1 y al PC2 que ha habido cambios, pero lo que yo quiero es que si el PC1 hace el cambio, que no se lo autocomunique, que solo lo comunique al PC2 y a todos los de la red menos a él mismo.

He hablado con otros usuarios de otros motores y me dicen "eso lo hace sola la base de datos".... pero será porque por defecto hay parametros establecidos que lo establecen (digo yo).

Podríais echarme una mano con esto de las comunicaciones a los PC's de la red???

Muchas gracias a todos por intentar ayudarme.

Marcial
Responder Con Cita
  #2  
Antiguo 12-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El tema es que si se produce un cambio, no se puede saber si lo ha originado la propia base de datos (un trigger por ejemplo) o ha sido el programa que tú has diseñado. De hecho, puedes ejecutar un sql que produzca 10 EventAlert, pero no se mandan todos a los clientes, se envía un solo evento con un parámetro que indica la cantidad de veces que se ha producido.


Puedes hacer un invento, pero se te va a complicar un poco. Por ejemplo, usas una tabla donde guardas el usuario que ha realizado la modificación; cuando recibas el evento en tu aplicación, consultas esa tabla y si el usuario es el mismo que ha realizado el guardado, no presentas el mensaje de advertencia.

Ignoro si hay una solución mejor.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 12-11-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Al momento de regresar disparar el evento en la base puedes hacerlo incluyendo el nombre del usuario que esta generando el mismo algo asi;

Código SQL [-]

POST_EVENT 'MODIFICANDO_TABLAX'||USER;

luego en tu aplicacion solo debes de revisar eso pues si el evento es el indicado y no dispararlo si el usuario es diferente al logueado actualmente.

espero haberme dado a entender.
Responder Con Cita
  #4  
Antiguo 12-11-2008
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias a los dos por responder.
Lepe, estaba siguiendo tu consejo de fabricarme una tabla y he visto la respuesta de Kipov.
Kipov, como haces para preguntar por el usuario??.
He cambiado el POST_EVENT como me has dicho y en Delphi
en el OnEventAlert pongo

Código Delphi [-]
        if EventName='CAMBIO_ARTICULO' then
                begin
               showmessage('Registro modificado por el usuario: ' + #13#13              + User);

pero no funciona.
¿Podrías ampliarme un poco más esto?

Gracias de antemano a todos por responder
Marcial
Responder Con Cita
  #5  
Antiguo 12-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Eso precisamente era lo que yo quería evitar. Tener en el mensaje el nombre del usuario.

Según hice una prueba (fb 1.5 creo recordar) no me permitía usar post_event con esa sintaxis. quizás usando execute statement pudiera ser, no lo sé.

Código SQL [-]
msg = ' post_event MODIFICANDO_TABLAX' || USER;
execute statement msg;

Además tenemos el inconveniente que al registrar el mensaje en los TEvenAlert, ya debemos tener en cuenta el usuario y que no varíe en ninguna letra. marcial el mensaje que debes registrar es:
Código Delphi [-]
if event_name = 'MODIFICANDO_ARTICULONOMBREUSUARIO' then

y ya digo, no sé si funcionará. Lo de la tabla auxiliar, siempre debería funcionar.

SAludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 13-11-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
Cita:
Empezado por marcial Ver Mensaje
Gracias a los dos por responder.
Lepe, estaba siguiendo tu consejo de fabricarme una tabla y he visto la respuesta de Kipov.
Kipov, como haces para preguntar por el usuario??.
He cambiado el POST_EVENT como me has dicho y en Delphi
en el OnEventAlert pongo

Código Delphi [-] if EventName='CAMBIO_ARTICULO' then begin showmessage('Registro modificado por el usuario: ' + #13#13 + User);


pero no funciona.
¿Podrías ampliarme un poco más esto?

Gracias de antemano a todos por responder
Marcial
No se quien sera ese tipo pero te respondo ,

es precisamente como dice Lepe, debes de registrar en los eventos "NOMBRE_TABLAXNOMBRE_USUARIO', (simplemente recorrer todos los usuarios de la bd no uso los fb pero me imagino que algo han de traer para poder hacerlo). luego solo quitas de la cadena del eventname NOMBRE_TABLAX y listo tienes el nombre del usuario.
Responder Con Cita
  #7  
Antiguo 13-11-2008
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Gracias a todos los que respondeis y a los que lo intentais y no lo haceis.
El problema lo estoy solucionando como dijo Lepe, con una tabla auxiliar, ya que por desgracia mi nivel de firebird no me permite soltura suficiente como para lo que me decis del evento Nombre_de_Tabla_User y luego quitar el User del nombre.... Pero todo se andará (con vuestra ayuda).

Marcial
Responder Con Cita
  #8  
Antiguo 18-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Usando el usuario es una buena idea mas no funciona siempre. Por que solo se podria conectar un usuario a ala ves.

usar una tabla auxiliar es hacer mas consulta hacia la bd lo cual no seria optimo.

usando esto:
Código SQL [-]
POST_EVENT 'MODIFICANDO_TABLAX'||':'||current_connection
Es perfecto ya que nunca existiran dos conexiones con los mismos identificadores.

De esta manera verificas el evento que llego y tienes el id de la conexion. Si es persistente de no ser una coneiox persistente debes guardar el id antes de realizar cambio.

Tambien te recomiendo que hagas eventos separados para insercion, modificacion y borrado ya que los eventos de modificacion y insercion no deberian notificar nada, mas si los de borrado.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #9  
Antiguo 18-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Si puedes encontar los componenestes de ibobjects estos traen un componente que realiza lo que quieres y los dataset ya estan dotados de estas propedades. asi te puedes guiar de como hacerlo.

sigue al pie de la letra las reglas de progracion.
1. Si funciona ni lo toques
2. Lo que esta echo no se vuelve hacer. Solo usalo
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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
notificacion de correo nuevo... julidelp Internet 3 12-12-2006 05:18:20
notificacion por E-mail pharaonhx Internet 6 20-12-2004 22:57:13
Notificacion del debugger isc_hilda Varios 0 13-05-2004 21:28:35
Ventanas de notificacion Rudi Varios 8 27-10-2003 18:17:20


La franja horaria es GMT +2. Ahora son las 09:51:42.


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