【问题标题】:Switch an Access database between shared and exclusive mode?在共享模式和独占模式之间切换 Access 数据库?
【发布时间】:2009-07-28 03:31:17
【问题描述】:

我正在开发一个需要编辑 Access 数据库中的某些对象的程序。它还运行一个子程序(长话短说),该子程序尝试访问底层 JET 数据库而 Access 仍然通过 ODBC 打开它

问题在于,一旦我开始使用 VBA 编辑表单对象 - 例如,使用 Application.LoadFromText - Access 会将数据库更改为独占模式。独占模式本身很好,我知道它为什么需要它。但之后我需要能够切换回“共享”模式,以便我可以运行我的子程序。

我观察到,如果您使用 UI 在设计模式下打开表单,Access 会将数据库切换到独占模式。 (您可以通过尝试从另一台计算机打开它来确认这一点。)但是当您关闭表单设计器时,Access 会立即将其切换回共享模式,这正是我所希望的。

有没有办法自己使用 VBA/COM 调用来回切换它?

我知道我可以调用 Application.CloseCurrentDatabase(),然后调用 OpenCurrentDatabase(),但这会关闭所有窗口并扰乱 UI,因此并不理想。

【问题讨论】:

  • 我找到了一种解决方法:打开任何表单,然后将其关闭。这似乎导致 Access 重新考虑是否需要数据库保持独占模式。然而,这很恶心。
  • 您的问题令人困惑,因为 Access 无法使用 ODBC 连接到自己的数据文件 (Jet/ACE)。
  • 对,我的子程序实际上是用 C++ 编写的。只要 Access 没有打开 .mdb 文件,或者它在共享模式下打开它,C++ 程序就可以通过 ODBC 操作它。 (而且它比使用 DAO 或 ADO 快大约 10 倍,或者我们只是从开放的 Access 数据库中借用 DAO 连接。)

标签: vba ms-access dao


【解决方案1】:

将数据库拆分为带有表单/模块/等的单独前端。和带有表格的后端选项?这样,如果前端被锁定,后端仍然可以访问。 Access 有一个用于此目的的数据库拆分向导。

【讨论】:

  • 这是一个选项——我正在做的一些数据库实际上是以这种方式拆分的——但这并不理想。我不需要在 它被锁定时进行操作,我只需要能够按需锁定和解锁。
  • 拆分是唯一明智的答案。
  • 如果这是真的,那就太可悲了。有问题的数据库既小又简单,仅仅因为一个微不足道的锁定问题就强迫它们分裂是一种耻辱。
【解决方案2】:

您可以尝试使用 .UserControl 和 .Visible。我使用它们在自动化流程中转移控制。我不知道他们是否会在这里提供帮助,但如果他们不这样做,您可以投反对票。

【讨论】:

  • 我不确定这是否有用。数据库以独占方式打开;这并没有阻止 VBA 应用程序控制它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多