我正在使用 Jackcess 更新 Access 表中的数据。另一个应用程序正在通过 Microsoft Access 数据库引擎 (Jet) 轮询数据。但是,直到我强制它关闭数据库并重新打开它,它才能获取更新的数据。
有谁知道 Access 数据库引擎如何检测 Jackcess 的数据更改?
我正在使用 Jackcess 更新 Access 表中的数据。另一个应用程序正在通过 Microsoft Access 数据库引擎 (Jet) 轮询数据。但是,直到我强制它关闭数据库并重新打开它,它才能获取更新的数据。
有谁知道 Access 数据库引擎如何检测 Jackcess 的数据更改?
经过一番研究,我发现 Jackcess 是 4 类数据库驱动程序。它直接读/写数据库文件。JETS 无法检测到我的 4 型驱动程序所做的更改。为了使用它,我需要一个 JDBC-ODBC 桥,类型 1 数据库驱动程序。我必须从 Java 7 中提取一些代码并将它们放入 Java 8。这仅适用于 32 位 Java,因为 JETS 只有 32 位。
有谁知道 Access 数据库引擎如何检测 Jackcess 的数据更改?
它没有。您的其他应用程序必须关闭并重新打开其 Access 数据库引擎 (ACE/Jet) 连接,才能了解 Jackcess 所做的更改。
请注意,如果其他 (ACE/Jet) 应用程序也需要对Access 数据库进行更改,这会产生影响。这两个应用程序将相互独立地直接写入 Access 数据库文件,在这种情况下,文件很可能会损坏。
即使
每个应用程序只写入某些表/列。书面上没有重叠/冲突。
如果所有表都驻留在同一个数据库文件中,则仍有可能损坏。例如,如果 Jackcess 应用程序分配一个额外的数据页来保存一条新记录,而 Jet/ACE 应用程序还需要分配一个额外的数据页来保存它试图插入的一些其他记录,那么 Jet/ACE 应用程序将不知道“下一个可用页面”已被 Jackcess 应用程序占用,并会尝试为自己分配相同的页面。充其量,结果将是某种错误。在最坏的情况下,这两个应用程序只会破坏彼此的更改。
如果这两个应用程序确实确实写入了完全独立的表集而没有重叠,那么可以通过将这两组表保存在两个单独的 .accdb 文件中来减轻损坏的危险,使用链接表允许应用程序“查看”所有的表在一个地方。