什么是Access错误?您目前没有对数据库的独占访问权限

时间:2010-10-21 07:04:25

标签: ms-access locking ms-access-2003

在Access 2003 Pro(版本11.8321.8324)SP3上测试。

重现的步骤:

  • 创建一个新数据库。
  • 制作新表格。
  • 在表格上放一个按钮。
  • 将以下代码粘贴到按钮的Click事件过程中:
  

Debug.Print Workspaces.Count
     Debug.Print CurrentDb.Name

  • 关闭代码编辑器和表单,保存更改。
  • 不要跳过此步骤:关闭访问权限。
  • 重新打开Access和您的数据库。
  • 打开表单
  • 点击按钮
  • 单击工具栏按钮将表单切换为设计模式。

您应该看到以下错误对话框:

  

您目前没有对数据库的独占访问权限。如果您继续进行更改,则可能以后无法保存。

Access error dialog

有谁知道这里发生了什么?

1 个答案:

答案 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忘记它应该如何工作。似乎不是创建当前数据库的新实例,而是使用已经在默认工作区中存在的实例。

当然,这都是猜想,我对你知道“真正的答案”感到好奇。