我正在开发一个Delphi XE7应用程序,其数据存储在一个在线的Mysql数据库中。对于数据库访问,我使用FireDAC。因为应用程序可以同时在多台计算机上使用,所以我需要在更改表时收到通知,这样我就可以更新每台计算机上显示的信息。 FireDAC有一个名为TFDEventAlerted的组件,听起来就像我需要的那样。但是这个组件在激活时会发出错误(调用Register):[FireDAC] [Phys] [MySQL] -303。不支持功能。 我不确定这意味着什么,但在阅读了有关该组件的更多内容后,似乎Mysql不支持这种类型的事件?如果是这样的话:任何人都可以告诉我是否还有其他解决办法来实现同样的目标?
任何帮助都会受到赞赏,因为我似乎无法找到一个好的解决方案。
答案 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数据库。该数据库不支持事件模型。如果您想“实时”更新数据,则必须添加对已更改数据的手动请求
以下是步骤:
在数据库表中添加新字段,例如“last_updated”;
在更新或插入操作(通过触发器或sql)时按TFDEventAlerted
值填写该字段;
将计时器添加到delphi应用程序并按now()
添加请求以获取最后更新时间;
如果该时间是新的,则按SELECT MAX(last_updated) AS last_updated FROM my_table
请求更新的数据。