UCanAccess和多个并发更新

问题描述 投票:-1回答:1

我在更新Access 2003数据库(.MDB)中的记录时遇到问题:

[有一个用Delphi编写的客户端#1(ADOConnection,ADOQuery,模式:读取或共享...。没有区别)-它从客户端#2也可以访问的数据库中获取数据-它是用JAVA创建的( Eclipse + UCanAccess +示例中使用st2的第二种方法)

问题是,从客户端#2调用UPDATE时-客户端#1在物理关闭表之前不会看到更改。客户端2不会发出错误,但是只有关闭客户端1才能看到更改。

如果使用MS Access代替客户端#1,效果是相同的。但是,如果使用MS Access而不是客户端#2进行编辑,则客户端#1会立即看到更改。

因此,我得出结论,问题出在UCanAccess的功能上,这些功能无法物理地编辑数据库:有关在查询中使用SQL更新运算符的“溢出”。

访问选择查询不是物理表,即使它们看起来像它们。它们只是选择查询。如果要针对选择性查询进行更新,则访问可以更新基本表中的数据:基本表用于查询并参与更新。因此,这是Jet引擎可以完成的复杂工作,如果使用不当,还会导致错误和模糊的SQL代码。

UCanAccess依赖Hsqldb,在许多情况下,Hsqldb不允许更新视图中的语句。因此,您应该直接在要更新的表中调用SQL更新语句。”朝正确的方向思考?有人在UCanAccess上遇到这样的问题吗?如何在不使用客户端#1关闭数据库的情况下解决这种情况?

ms-access jdbc ucanaccess
1个回答
0
投票

您已经遇到UCanAccess的已知限制,因为它与多用户并发写访问有关。具体来说

UCanAccess无法支持单独的并发进程同时对Access数据库进行更改

详细信息在这里:

https://ucanaccess.blogspot.com/2017/07/multiuser-concurrent-write-access.html

© www.soinside.com 2019 - 2024. All rights reserved.