如何在Delphi中接收MySQL数据库通知?

时间:2015-09-13 16:31:01

标签: mysql delphi firedac

我正在开发一个Delphi XE7应用程序,其数据存储在一个在线的Mysql数据库中。对于数据库访问,我使用FireDAC。因为应用程序可以同时在多台计算机上使用,所以我需要在更改表时收到通知,这样我就可以更新每台计算机上显示的信息。 FireDAC有一个名为TFDEventAlerted的组件,听起来就像我需要的那样。但是这个组件在激活时会发出错误(调用Register):[FireDAC] [Phys] [MySQL] -303。不支持功能。 我不确定这意味着什么,但在阅读了有关该组件的更多内容后,似乎Mysql不支持这种类型的事件?如果是这样的话:任何人都可以告诉我是否还有其他解决办法来实现同样的目标?

任何帮助都会受到赞赏,因为我似乎无法找到一个好的解决方案。

1 个答案:

答案 0 :(得分:1)

/* Linux */ #include <linux/types.h> #include <linux/input.h> #include <linux/hidraw.h> /* Unix */ #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> /* C */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <iostream> using namespace std; int main() { int fd; int i, res, desc_size = 0; char buf[256]; struct hidraw_report_descriptor rpt_desc; struct hidraw_devinfo info; fd = open("/dev/hidraw0", O_RDWR); if(fd < 0) { perror("Unable to open device"); return 1; } else { cout << "Something happend!" << endl; return 0; } } 控件不适用于MySQL数据库。该数据库不支持事件模型。如果您想“实时”更新数据,则必须添加对已更改数据的手动请求

以下是步骤:

  1. 在数据库表中添加新字段,例如“last_updated”;

  2. 在更新或插入操作(通过触发器或sql)时按TFDEventAlerted值填写该字段;

  3. 将计时器添加到delphi应用程序并按now()添加请求以获取最后更新时间;

  4. 如果该时间是新的,则按SELECT MAX(last_updated) AS last_updated FROM my_table请求更新的数据。