将MySQL事件通知实现回Delphi应用程序

时间:2010-10-21 03:06:13

标签: mysql delphi notifications

天儿真好,

是否有人能够提供一些指示,告诉我如何通知我的Delphi应用程序MySQL数据库中的特定记录已更改? Interbase的事件系统是什么?

我看过的想法:

:Q4M :. (http://q4m.31tools.com/

优点:本机MySQL解决方案不需要外部守护进程 缺点:由于使用特定于Linux的Posix调用

,因此不存在Win32构建

:MySQL Message API :. (http://messagequeue.lenoxway.net/

优点:强大(使用spread.org) 缺点:没有Win32二进制文件。需要spread.org的其他配置和守护程序

:自定义用户定义函数:。

我正在尝试编写一个可以使用Win32 API PostMessage()的UDF,因此将一条Windows消息发送到一个简单的套接字服务器。

优点:与MySQL集成(尽管具有外部DLL依赖性)。可以根据我的需求定制 缺点:我无法让它发挥作用(见帖子MySQL User Defined Function to send a windows message)。这可能是因为MySQL作为服务运行

任何指针,想法等都非常感激。

- d

2 个答案:

答案 0 :(得分:3)

作为一种选择,您可以考虑使用像RemObject DataAbstract或kbmMW这样的中间层解决方案。 AFAIK,它们允许跟踪中间层的变化,并提供通知客户的机制。

答案 1 :(得分:2)

我最终实现如下:

  • 创建了在TCP端口和Windows管道
  • 上侦听的Windows应用程序
  • 创建了一个mySQL用户定义函数(UDF),它将连接到上面的Windows管道并发送一些信息
  • 向数据库中的表添加触发器以调用UDF,其中包含有关哪个表,哪些操作(插入,删除,更新),主键值
  • 的信息
  • TCP客户端现在可以连接到Windows应用程序以接收从UDF传递的信息
  • 然后,TCP客户端可以根据需要使用检索到的信息进行刷新

运行良好,明智的重量轻(因为客户只需刷新他们需要的东西)。同时将TCP服务器与数据库保持在同一台机器上并使用Windows管道意味着管道可以保持打开状态,并且通过写入管道,不会有TCP堆栈开销。表示mySQL上的负载和执行UDF所花费的时间非常小。