【发布时间】: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 连接。)