我在一个显示许多计算的软件中使用Delphi和Firebird DB,根据需要,我需要在其他相关表更新时存储和显示总数。
我目前正在为几个TIBTable组件使用refresh方法,以向用户显示这些计算的结果。考虑到这个多用户应用程序以及刷新使发布缓慢的事实,是否有任何替代刷新或更优化的方式?
答案 0 :(得分:3)
对于客户端需要接收通知的多用户应用程序,一种选择是使用 Firebird events 为每次数据更改发送“广播”消息(SQL INSERT,UPDATE或删除)。
客户端可以“注册”(监听)特定的消息类型,每当Firebird服务器发送具有此类型的消息时,他们都会收到它,并运行客户端应用程序代码,在您的情况下会刷新用户界面对象显示总数。
虽然在许多简单的用例中这可以是一个充分的解决方案,但也存在一些限制。我最近在这里写了关于这个主题的博客:
(我是Delphi和Free Pascal中间件库的作者)
答案 1 :(得分:1)
为了获得新数据,我们无法再刷新。但是,如果您使用IBObjects进行数据库访问,则可以使用TIBOTable.InvalidateBookmark
方法使其仅刷新特定行。这比调用Refresh
要快得多,后者会刷新整个数据集。
看看the documentation,不幸的是,TIBTable似乎没有任何可比性。