首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么知道数据集已经改变

2012-02-07 
如何知道数据集已经改变?在一个定时器里,用adoQuery的requery方法定时向服务器获取数据,怎样知道数据集已

如何知道数据集已经改变?
在一个定时器里,用adoQuery的requery方法定时向服务器获取数据,怎样知道数据集已经发生变化?即怎样知道数据集增加、减少或替换了记录?

[解决办法]
这个问题我们讨论过多次
用定时器不停查询数据库是个极不明智的做法,它不仅大大增加服务器和网络的负担,还很容易引起数据库死锁,理论上,这种方法是可行的:
将要查的表设一唯一字段(如sqlsetver/access的自增字段或oracle的序列).用SQL将它读回,放入数组.第二次与上一次的比较,这样可以知增/删了多少记录,替换的只要将可能被替换的字段全部读回,并与上一个比较
如果,数据表的记录数或可改的字段很多,这个方法效率就会大大下降
解决此问题的有效方法是
1.用触发器,将增/删/改的信息写入一日志表,然后用定时器去读,此方法明显要比上面的方法效率高
2.在写数据表的程序中处理(如果该程序也是你写的话),这个方法是最可行的,在增/删/改的同时,将信息通过网络(Socket)发送到目标机
3.有些数据库本身支持数据处理事件(如interbase),当数据变动时,会向客户端发消息

[解决办法]
可以通过触发器控制写一个日志表,包括插入和更新:插入标志、更新标志。只有一行数据。
程序初始化时读取标志数据,当程序运行过程中通过定时器查询日志表,如果当前标志值大于初始
值,则Reload数据集。


在Slackware Linux 11+Ice+Fcitx回帖.

热点排行