![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() 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 |
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
Al momento de regresar disparar el evento en la base puedes hacerlo incluyendo el nombre del usuario que esta generando el mismo algo asi;
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. |
#4
|
|||
|
|||
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
pero no funciona. ¿Podrías ampliarme un poco más esto? Gracias de antemano a todos por responder Marcial |
#5
|
||||
|
||||
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é.
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:
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. |
#6
|
||||
|
||||
Cita:
![]() 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. |
#7
|
|||
|
|||
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 |
#8
|
||||
|
||||
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: 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. |
#9
|
||||
|
||||
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. |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
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 |
![]() |
|