这是一个特定的场景。我需要做的是:
这是不需要做的事情:
这是我们认为可以完成的工作:
创建一个表,用于存储监视的表名,它拥有的行数和验证密钥,让我们调用integrity_tbl
。插入或删除后,更新行数和验证密钥。仅在验证密钥有效时才更新行数。每次比较失败时都会使验证密钥无效。需要进行数据完整性验证时,请计算表格中的行数并与integrity_tbl
进行比较。
你认为这是一个好方法还是我们应该尝试别的东西?
我们正在使用Delphi和Firebird。 如我所知,我们正在使用IBX连接到数据库。但逻辑是问题,而不是访问数据库的方式。
答案 0 :(得分:0)
从每个表计算MD5(或其他)校验和或签名,将其存储在某处,例如.ini文件,另一个表(特定于此目的)等。
答案 1 :(得分:0)
Firebird有一个非常好的机制,用于在数据库中的任何位置发生特定更改时通知客户端。该机制称为Firebird Events。阅读该文档以正确理解其运作方式。
通常,事件用于触发器或存储过程。您使用关键字POST_EVENT <event_name>
将特定事件发送到所有连接的客户端。 <event_name>
可以是最多127个字符的任何字符串。然后,在Delphi中,您需要使用名为TIBEvents
的组件(或旧版Delphi中的TIBEventAlerter
)。在那里,您使用Events
属性指定您有兴趣接收的一个或多个<event_name>s
。之后,您需要为TIBEvents.OnEventAlert
编写代码,您可以在每次触发时对所有已注册事件做出反应。