MySQL - Notificar a los clientes conectados de cambios en la base de datos

 
Vista:

Notificar a los clientes conectados de cambios en la base de datos

Publicado por Jorge (2 intervenciones) el 08/03/2018 03:15:46
Buenas noches a todos, mi situación es la siguiente:

Estoy migrando a MySQL y me topé con un detalle, desarrollé una aplicación (con Delphi XE8) con la cual los clientes se conectan y visualizan los mismos registros, estos pueden ser modificados por cualquiera, mi situación es que si alguien modifica algo necesito que automáticamente (el linea) se refleje en los demás clientes. Uso el componente UniDAC como conexión y de este "unialerter" para capturar estas notificaciones o alertas, usaba la característica POST_EVENT en firebird (anteriormente) pero no he logrado hacer esto mismo en MySQL. He leido y buscado documentación para lograr esto pero no he tenido éxito.

No se si MySQL tiene esta característica o se debe de hacer algo diferente para lograr esta funnción.

Les agradezco de antemano el apoyo a este problema.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Notificar a los clientes conectados de cambios en la base de datos

Publicado por Rafael (97 intervenciones) el 12/03/2018 13:15:15
Hola, Jorge:

Estas cometiendo un par de errores:

1. MySQL es un gestor de base de datos.
2. Lo que tu pides es un proceso en la capa del cliente, NO es un proceso en la base de datos.

Vamos a ver a que me refiero...

Cuando tu realizas un insert, update o delete en MySQL, y despues de realizar el COMMIT, este dato se actualiza y todo cliente que consulte los datos vera dicha modificacion.

Ahora bien seguramente tu desarrollo consulte la base de datos, y estos los coloque en algun contenedor ... por ejemplo PHP... OJO QUE YA NO ES MYSQL!!!

Php se conecta a MySQL consulta los datos, los pone en un resultset, es decir los datos han viajado y no es la misma conexion que tu firebird... ahora bien esto generalmente se vacia en un table o en algun tipo de contenedor HTML que tampoco esta conectado a la Base de Datos, solo se ha rellenado con los datos que has solicitado antes...

Luego el que debe hacer el refresh es PHP no MYSQL por que el cambio en MYSQL ya se hizo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Notificar a los clientes conectados de cambios en la base de datos

Publicado por Jorge (2 intervenciones) el 13/03/2018 03:51:59
Gracias por responder Rafael, entiendo lo que mencionas, pero mi situación es diferente, la aplicación es no es web, es de escritorio, en el componente UniDAC que es el que utilizo encontre esta información:

Note: not all DBMS supports event notification. Currently TUniAlerter can be used with Oracle, PostgreSQL, and InterBase(Firebird).
TUniAlerter uses the following DBMS-specific features to send and receive events:
Oracle: DBMS_ALERT package;
PostgreSQL: NOTIFY and LISTEN commands;
InterBase: POST_EVENT command; <---- este es el que utilizaba en firebird.

Y por lo que leí MySQL no cuenta con algo parecido, por eso mi pregunta abarcaba el si hay alguna solución para realizar este proceso.

Mas claro: dos clientes conectados y tienen abierto una "papeleta" que contiene datos de un registro, ejemplo: folio, nota, dirección.
uno de los 2 hace modificaciones en un campo,por ejemplo notas, al momento de realizar la modificación, el otro usuario que esta visualizando se le reflejan los cambios automáticamente, no necesita realizar manualmente de nuevo la consulta, el servidor de firebird avisaba a todos los clientes (por medio de POST_EVENT) y la aplicacion cliente al recibir esta notificación hacia un refresh de la tabla, actualizando con esto de manera automática y en linea el registro.
Creo me expliqué un poco mejor.

Gracias por tu apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar