【问题标题】:What is this Access bug? You do not have exclusive access to the database at this time这是什么访问错误?您目前没有对数据库的独占访问权限
【发布时间】:2010-10-21 07:04:25
【问题描述】:

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

重现步骤:

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

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

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

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

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

有人知道这里发生了什么吗?

【问题讨论】:

  • 关闭后,锁文件(.ldb)是否还在,即没有自动删除?
  • @awrigley:不,它被删除了。
  • 计算工作空间时一定有问题,出于某种原因,它可能认为其他项目已访问/打开它。但我推测,我真的没有任何线索。我会联系 MS。
  • @awrigley:“计数”是一条红鲱鱼。从我的实验中,你只需要参考“工作区”,所以我选择了一个看起来无害的属性。
  • DBEngine.Workspaces.Count 是否会导致同样的问题?我的猜测是 DAO.Workspaces.Count 正在被使用,并且正在初始化导致问题的 DAO 中的某些内容。除了作为 DBEngine 的孩子之外,我从未使用过 Workspaces 集合。当然,这可能没有意义,因为 DBEngine 本身是 DAO 和 Application 对象的子对象,因此除非 DBEngine.Workspaces 默认为 Application 父对象,否则它不会成为问题的原因。您应该在不参考 DAO 的情况下对其进行测试。

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


【解决方案1】:

简单的解决方法是在第一次调用 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) 返回一个指向的指针 当前数据库。在微软 访问2000,你应该使用 而是使用 CurrentDb 方法。 该 CurrentDb 方法创建另一个 当前数据库的实例, 而 DBEngine(0)(0) 语法是指 到当前的打开副本 数据库。 CurrentDb 方法启用 您创建多个变量 数据库类型,指的是 当前数据库。微软访问 仍然支持 DBEngine(0)(0) 语法,但你应该考虑制作 对您的代码的此修改 为了避免可能的冲突 多用户数据库。

对于 Workspaces 集合:

当您第一次提及或使用 工作区对象,您自动 创建默认工作区, DBEngine.Workspaces(0)。

似乎通过在第一次调用 CurrentDb 之前创建默认工作区,您会以某种方式导致 CurrentDb 忘记它应该如何工作。似乎不是创建当前数据库的新实例,而是使用默认工作区中已经存在的实例。

当然,这都是猜测,我和你一样好奇,想知道“真正的答案”。

【讨论】:

  • 我实际上找到了解决方法,但它并没有让我更接近了解正在发生的事情。 (也没有阅读帮助!)我认为另一个解决方法是永远不要引用 Workspaces 集合。
  • 这没有任何意义。如果您在用户界面中打开了数据库,则工作区已经创建。
  • 我同意这毫无意义。但这是我能想出的最好的(尽管公认的弱)解释,为什么切换语句的顺序可以解决问题。
  • 我的意思是,以不同的方式创建工作空间而以另一种方式创建工作空间的解释完全是荒谬的。原因显然必须是其他原因,因为当您打开数据库时,Jet 工作区就存在。可能是用于返回具有初始化问题的工作区的库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2018-04-01
  • 2016-02-21
  • 2010-09-07
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多