在所有连接终止之前,为什么超过2个用户使用ADODB通过网络与数据库通信,彼此之间看不到对数据库的更改?

时间:2019-04-16 19:51:44

标签: excel vba ms-access sharepoint ado

第一个问题在这里。希望这不是太罗word:

我已经使用VBA构建了一个Excel应用程序来与MS Access数据库(.accdb)通信,该数据库应该支持并发用户访问它。该文件应作为可访问文件(不以任何其他方式集成到该文件中)放置在Sharepoint网站上。当我在家庭网络上测试Excel文件和数据库时,它像超级按钮,事务和所有功能一样工作。但是,将其迁移到Sharepoint后,我发现它与我的个人网络上的操作方式存在一些极端差异:

  1. ADODB {.open}和{.close}方法每个至少花费15秒(使Excel冻结直到完成)。因此,我决定在应用程序的整个生命周期中仅打开和关闭一次连接,并在连接断开时恢复连接。我知道以下事实是非常不推荐的,但是让我的用户等待这么长时间是无法承受的。除了我将要解释的问题之外,这没有引起我知道的任何问题。

  2. 问题:除非关闭所有与数据库的活动用户连接,否则即使更改是唯一的活动,也不会将更改保存到实际数据库中。我想直到所有连接终止后,每个用户在尝试更新时一切都会顺利进行,并且每个用户都可以访问他/她的更改。我尝试了所有可能的游标类型和锁定类型,但似乎没有任何效果。就像数据库的本地副本存储在用户的计算机上一样(因此,打开和关闭连接时要等待很长时间),更新存储在临时版本上,而不是实际版本上。

我尝试了所有可能的组合,包括游标类型,游标位置,锁定类型以及不支持的组合(在我的案例中发现不支持动态游标-我想知道这是否是答案)。

由于这个原因,我别无选择,只能使该程序一次只能供一个用户访问,否则在此过程中似乎丢失了更改,从而使该程序高度不可靠。

我读到一些有关“刷新缓冲区”或“刷新游标”的信息。这是否可能/必要?还是这样?如果我使用键集游标,我的编辑记录不应该显示给所有其他用户吗? (不是在谈论新的)

对于它的价值,我在访问它之前将路径映射到共享点文件夹。

你们有没有经历过类似的事情?或有什么建议?

如果您需要我的代码示例,我会尽快发布。非常感谢!

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法:

  

尽管您可以将Access数据库文件保存到OneDrive或SharePoint文档库,但是我们建议您避免从这些位置打开Access数据库。可以将文件下载到本地进行编辑,然后将更改保存到SharePoint后再次上传。如果有多个人从SharePoint打开Access数据库,则可能会创建数据库的多个副本,并且可能会发生某些意外行为。此建议适用于所有类型的Access文件,包括单个数据库,拆分数据库以及.accdb,.accdc,.accde和.accdr文件格式。有关部署Access的更多信息,请参阅部署Access应用程序。

来源:Ways to share an Access desktop database