3

这是一个特定的场景。我需要实现的是:

  1. 如果有人在我的应用程序 UI 之外的指定表中插入或删除一行或多行,那么它应该检测到该表已被修改。
  2. 它不应该使用触发器。

这是它不需要做的:

  1. 区分是删除还是插入。
  2. 检测进行了更改或更改了位置
  3. 如果用户同时执行相同数量的插入和删除。从技术上讲,这可以算作更改,因此不需要将其检测为插入和删除。

这就是我们认为可以完成这项工作的方法:创建一个存储被监视的表名、行数和验证键的表,让我们调用integrity_tbl. 插入或删除后,更新行数和验证键。仅当验证键有效时才更新行数。每次比较失败时使验证密钥无效。当需要数据完整性验证时,计算表中的行数并与integrity_tbl.

您认为这是一个好方法还是我们应该尝试其他方法?

为此,我们使用 Delphi 和 Firebird。如前所述,我们正在使用 IBX 连接到数据库。但逻辑是问题而不是访问数据库的方式。

4

2 回答 2

1

Firebird 有一个非常好的机制来通知客户端是否以及何时数据库中的任何地方发生了某些特定的更改。该机制称为Firebird 事件。阅读该文档以正确了解其功能。

通常,事件用于触发器或存储过程。您使用关键字POST_EVENT <event_name>将特定事件发送到所有连接的客户端。<event_name>可以是最多 127 个字符的任何字符串。然后,在 Delphi 中,您需要使用名为的组件TIBEvents(或TIBEventAlerter在较旧的 Delphi 版本中)。在那里,您可以使用Events指定一个或多个<event_name>s您有兴趣接收的属性。之后,您需要编写代码,以便TIBEvents.OnEventAlert在每次触发所有已注册事件时对它们做出反应。

于 2012-06-15T15:00:41.870 回答
0

从每个表中计算 MD5(或其他)校验和或签名,将其存储在某个位置,例如 .ini 文件、另一个表(特定于此目的)等。

于 2012-06-13T20:21:15.523 回答