【问题标题】:Client-Server database application: how to notify clients that data was changed?客户端-服务器数据库应用程序:如何通知客户端数据已更改?
【发布时间】:2012-05-17 14:55:03
【问题描述】:

是否有可能知道数据库中某些表的内容何时以及是否发生了变化? 我的 SQL Server 如何通知客户端应用程序数据已被其他用户更改?如何使用 dbGo 实现查询通知?

我的客户是否需要轮询数据库,或者是否有回调机制?

我的客户端是一个带有TADODataSet 的 Delphi 应用程序,我的服务器是 SQL Server 2005/2008,为多个客户端提供服务。

【问题讨论】:

  • @TLama,仍然没有针对 TADODataSet 和 SQL-Server 的最终解决方案。
  • 如果this answer 正确,则dbGo (ADO) 不支持通知...
  • 这个比较好stackoverflow.com/q/7843019/960757,但是还是不行,dbGo不支持查询通知。
  • 这就是为什么我更喜欢在 Delphi 框架中使用 Bold。它会在数据库更改时自动更新客户端。非常方便。当然还有很多其他功能也可以加快开发速度。

标签: sql-server delphi client-server


【解决方案1】:
【解决方案2】:

不,您必须建立自己的“中间层”才能做到这一点。最简单的方法是轮询服务器。更复杂的解决方案是构建您自己的“中间层”服务器,轮询数据库并将通知推送到客户端(使用您自己的客户端连接)。

一个中间的解决方案是在服务器上有一个单独的客户端轮询您需要“监视”的表并将“通知标志”写入另一个可由客户端轮询的数据库表。至少通过这种方式,客户端可以轮询一个包含最少数据的简单表,该表列出了已更改的内容,然后可以由另一个选择查询读取。客户的工作量大大减少。

【讨论】:

  • 还有一种“混合中间”方式:记录更改数据库客户端应用程序本身(包括应用服务器端逻辑)可以发送广播“记录更改!”通过中间层向所有监听客户端发送消息。这将是通知其他应用程序有关更改的“立即”方式。此外,您的“服务器上的单独客户端”可以运行更长的时间间隔以减少轮询量,并且可以在每次收到客户端生成的通知消息时跳过轮询周期...
猜你喜欢
  • 1970-01-01
  • 2014-10-25
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
相关资源
最近更新 更多