在Access 2003 Pro(版本11.8321.8324)SP3上测试。
重现的步骤:
Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name
您应该看到以下错误对话框:
您目前没有对数据库的独占访问权限。如果您继续进行更改,则可能以后无法保存。
有谁知道这里发生了什么?
答案 0 :(得分:0)
简单的解决方法是在第一次调用Workspaces之前调用CurrentDb:
Debug.Print CurrentDb.Name
Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name
我将揭开正在发生的事情的神秘面纱,但这只是我的理论。
Access帮助文件的相关位如下(对于CurrentDb):
注意在以前的版本中 Microsoft Access,您可能已经使用过 语法 DBEngine.Workspaces(0).Databases(0)或 DBEngine(0)(0)返回指针 当前的数据库。在微软 Access 2000,你应该使用 改为使用CurrentDb方法。的的 CurrentDb方法创建另一个 当前数据库的实例, 而DBEngine(0)(0)语法引用 到当前的开放副本 数据库。 CurrentDb方法启用 你要创建多个变量 类型数据库的引用 当前数据库。 Microsoft Access 仍然支持DBEngine(0)(0) 语法,但你应该考虑制作 对您的代码的这种修改 以避免可能的冲突 多用户数据库。
对于Workspaces集合:
首次参考或使用时 工作区对象,您自动 创建默认工作区, DBEngine.Workspaces(0)。
通过在第一次调用CurrentDb之前创建默认工作区,您似乎会以某种方式导致CurrentDb忘记它应该如何工作。似乎不是创建当前数据库的新实例,而是使用已经在默认工作区中存在的实例。
当然,这都是猜想,我对你知道“真正的答案”感到好奇。