尝试自定义工具栏或在设计视图中打开 Microsoft Access 表单、报表、宏或模块时,将收到以下消息:

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

尝试保存对 Access 表单、报表、宏或模块所做的设计更改时,会收到以下消息:

目前没有对数据库的独占访问权限。 不会保存设计更改。

尝试保存新的数据访问页时,会收到以下消息:

无法创建指向此数据访问页的链接,因为数据库不能完全锁定。

  • 你尝试在设计视图中打开窗体、报表、宏、模块或命令栏。
  • 尝试将设计更改保存到这些对象类型之一或新的页面链接,而其他用户则打开相同的数据库。
  • 若要保存对这些对象类型的设计更改,Access 必须能够获取数据库的独占锁定。

    在多个开发人员同时设计 Access 应用程序的情况下,必须使用 Microsoft access 的 Microsoft Visual SourceSafe 加载项实现源代码控制。 或者,必须将数据库的本地工作副本分发给每个开发人员。 接下来将讨论其中的每个选项。

    实现源代码控制

    Microsoft Access Visual SourceSafe Add-In允许你在开发时将 Access 应用程序置于源代码控制之下。 如果将应用程序置于源代码控制之下,则允许跟踪和存储随时间推移对应用程序所做的更改。 通过使用 Microsoft Visual SourceSafe,可以查看对象的历史记录,然后还原到对象的早期版本。 你可以查看 Microsoft Access 应用程序中的对象、修改对象或在其本地副本中创建新对象,然后在源代码控制下将其签回主数据库。 Microsoft Access Visual SourceSafe Add-In适用于 Microsoft Office XP 开发人员。 若要使用 Microsoft Access Visual SourceSafe外接程序,还必须单独安装 Microsoft Office XP 开发人员提供的 Microsoft Visual SourceSafe。

    使用单个工作数据库

    可以实现的另一个选项是将数据库应用程序的主副本保留在集中位置,然后在每个开发人员的计算机上使用数据库的各个工作副本。 每个开发人员都会在数据库的本地工作副本中开发应用程序的各个部分。 当开发人员想要对数据库应用程序中的对象进行更改时,他们会将该对象从 master 数据库导入到本地工作数据库中。 然后,开发人员将对本地工作数据库中的对象进行所需的更改,并保存该对象。 当开发人员准备好将更改提交到 master 数据库时,他们会将对象导出到 master 数据库,覆盖原始对象。

    使用此方法的一个缺点是无法确定多个开发人员是否同时在本地处理同一对象。 当开发人员将对象导出到 master 数据库时,开发人员可能会在不知不觉中覆盖另一个开发人员提交到 master 数据库的更改。

    若要保存对特定于 Access 的对象(如窗体、报表、新页面链接、宏、模块和命令栏)的设计更改,Access 2002 必须能够在 保存 操作期间专门锁定数据库。 表、查询和关系不受此限制,因为它们是特定于 Microsoft Jet 的对象。 Microsoft 将此要求用于 Access 2002,原因有以下几个:

  • 它提供与其他 Visual Basic 环境客户端应用程序的一致性。
  • 它停止对 Jet 数据库引擎的依赖。
  • 它提高了特定于 Access 的对象的稳定性。
  • 提供与其他 Visual Basic 环境客户端应用程序的一致性

    由于 Access 2002 托管 Visual Basic 环境,因此 Microsoft Access 使用的保存模型必须与托管 Visual Basic 环境的其他应用程序保持一致。 Visual Basic 环境仅允许对不在源代码控制下的 Visual Basic 项目进行独占编辑和保存。 Visual Basic 6.0 以及托管 Visual Basic 环境的所有 Office 应用程序也是如此。

    停止对 Jet 数据库引擎的依赖

    Access 提供创建 Microsoft Access 项目 (.adp) 文件和 Microsoft Access 数据库 (.mdb) 的功能。 通过使用 Access 项目,开发人员可以使用 Microsoft SQL Server作为 Microsoft Jet 的另一个数据库引擎。 过去, (表单、报表、宏、模块和命令栏) 的所有 Access 特定对象都依赖于 Jet 数据库引擎进行存储。 这些对象存储在 Microsoft Jet 数据库中特定于 Access 的系统表中。 由于 Access 可以使用 Microsoft SQL Server作为 Microsoft Jet 的替代方法,因此 Microsoft 必须为不依赖于 Jet 数据库引擎的特定于 Access 的对象开发存储机制。

    提高特定于 Access 的对象的稳定性

    项目存储模型可提高特定于 Access 的对象和 Visual Basic 项目的稳定性。 Visual Basic for Applications不允许在不使用源代码控制的情况下对 Visual Basic 项目进行多用户编辑。 Microsoft Access 95 和 Microsoft Access 97 可以通过将多用户环境中所做的项目更改从Visual Basic for Applications隐藏起来,然后稍后将其合并到项目中来规避此限制。 但是,这可能会影响 Visual Basic 项目的稳定性。 因此,Microsoft Access 在设计特定于 Access 的对象时需要独占锁定,以确保项目只有一个编辑器。

    在多用户环境中编辑 Access 对象

    由于用户可以打开数据库进行独占或共享使用,Access 显示的保存行为取决于用户打开数据库的方式以及多个用户当前是否正在访问该数据库。

    如果开发人员打开数据库供独占使用,则开发人员可以保存任何特定于 Access 的对象的设计,前提是开发人员可以打开数据库进行读/写访问,并具有修改对象设计的正确权限。

    如果用户打开数据库以供共享使用,则用户可以保存任何特定于 Access 的对象的设计,前提是用户可以打开数据库进行读/写访问,并具有修改对象设计的正确权限,Access 可以获取对数据库的独占锁定。

    为了确保数据库的使用是独占的,Access 使用 Jet 数据库引擎的连接控制功能将用户的共享锁提升为独占。 一旦用户在设计视图中打开窗体、报表、宏或命令栏,Access 就会尝试将共享锁升级到独占锁。 Access 此时会尝试锁定升级,以防止用户进行了多次设计更改,但后来发现用户无法保存这些更改,因为 Access 无法获取独占锁。 通过尝试在设计视图中打开对象后立即进行锁定提升,Access 可以在用户进行任何设计更改之前,如果用户无法获取独占锁,则可以警告用户。 在设计视图中打开模块时,Access 将不会尝试锁定升级;但是,一旦用户编辑数据库中的任何模块,它将尝试锁定升级。

    Access 保留独占锁,直到用户保存或丢弃所有脏对象,并且在设计视图中不会打开其他对象。 在此之后,如果数据库最初已打开以供共享使用,Access 会将锁降级回共享。

    如果当用户在设计视图中打开对象时,Access 无法将锁提升为独占,Access 会向用户发出消息警报:

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

    在此警告消息之后,Access 将在“设计”视图中打开该对象,并允许用户进行设计更改。 如果用户尝试保存对象,Access 会尝试将共享锁提升为独占。 如果锁定升级成功,Access 将保存该对象并维护独占锁,直到用户保存或丢弃所有其他脏对象,并且设计视图中没有对象保持打开状态。 如果锁定升级失败,用户将收到以下消息:

    目前没有对数据库的独占访问权限。 不会保存设计更改。

    如果用户尝试关闭脏对象并保存更改,Access 会提示用户选择关闭对象并放弃对其所做的设计更改,或者选择将其打开且未保存。

    重现行为的步骤

  • 在同一台计算机上启动两个 Microsoft Access 实例。

  • 在这两个实例中打开示例数据库 Northwind.mdb。

  • 在 Microsoft Access 的第一个实例中,在 “设计 ”视图中打开 “客户 ”窗体。

    你将收到以下消息:

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

  • 单击 “确定 ”以清除消息。

    窗体在 “设计 ”视图中打开。

  • 向窗体添加文本框控件。

  • 在“文件” 菜单上,单击“保存”

    收到以下消息:

    目前没有对数据库的独占访问权限。 不会保存设计更改。

  • 单击 “确定 ”以清除消息。

  • 关闭计算机上的第二个 Access 实例。

  • 在 Access 的第一个实例中,尝试再次保存窗体。

    表单已成功保存。

  •