如何从Delphi应用程序监视SQL服务器数据库表

5
如何在Delphi应用程序中实时监控特定表并获取新的和更新的记录数据?

使用 Bold,您始终拥有 GUI 中的最新数据。您无需轮询数据库表。更多信息请访问 http://boldfordelphi.blogspot.com。 - Roland Bengtsson
2个回答

8
一般来说,您可以使用数据库事件/通知/警报。确切的术语和实现取决于DBMS。有关详细信息,请查看AnyDAC文档中的“DBMS警报机制”。
在后端,您可能需要为所需的表实现触发器。对于某些DBMS,这不是必需的。例如,在Firebird中,触发器必须调用POST_EVENT语句。对于SQL Server,必须调用特殊的一组Query Update Notification API运算符来准备表。
在客户端上,您应该使用特殊的API或标准的SQL查询机制。例如,在Firebird中,必须使用特殊的事件API。对于Oracle,使用后台线程+标准SQL API。
Delphi实现取决于DBMS和数据访问组件。以下是一些示例:
- dbGo(ADO)不支持使用特殊API实现的通知; - dbExpress - 相同; - IBX - 使用Firebird时使用TIBEvents; - AnyDAC - 使用TADEventAlerter。它以统一的方式支持许多不同的DBMS机制。披露:AnyDAC是我所代表公司的旗舰产品。

1

SQL Server 2005及以上版本具有通知机制...但我不知道是否有任何免费组件支持此机制...

如果商业组件是一个选项,Devart SDAC支持此功能。

我所看到的唯一其他选择是轮询(可能来自后台线程)-但在我看来,轮询通常是要避免的事情。


3
WAITFOR RECEIVE 应该在 dbGo 中有效。这允许使用 dbGo 实现事件通知。 - da-soft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接