获取未保存的对象名称

时间:2018-01-27 07:12:03

标签: vba ms-access

我想在VBA中获取未保存的对象名称(表单,报表和模块)。例如,在保存对话框中的对象时创建一个事件来获取名称

Dialog box opened while saving objects

注意:重点是我想获取开发人员保存的对象名称并将其插入共享数据库中以逻辑方式锁定这些对象,并使其他开发人员知道这些对象已被其他开发人员锁定。

有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题:

  • 当多个用户尝试修改同一个Access对象时,如何实现版本控制和对象锁定以防止冲突?

答案:

  • 在某种程度上,Access已包含防止多个用户修改同一对象,工具栏项等的功能。

  • 无法 检索未保存对象的名称,因为该对象在其名称之前没有名称#39;已保存。

  • 此外,没有方式可以捕获"保存事件"如问题中的图像所示,也不从该对话框中检索文件名... 除了 ,如果您要开发Custom Office Add-in (使用等)来提供您描述的特定功能。

  • 话虽如此,您并不是第一个想要实现版本控制并防止多个开发人员在同一个数据库上工作的冲突的开发人员。微软有一些选择;摘录如下。

症状

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

  

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

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

  

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

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

  

无法创建指向此数据访问页的链接,因为无法独占锁定数据库。

原因

您正尝试在“设计”视图中打开表单,报表,宏,模块或命令栏,或者您尝试将设计更改保存到其中一个对象类型或新页面链接,而其他用户打开相同的数据库。要将设计更改保存到这些对象类型,Access必须能够获得对数据库的独占锁定。

解决

在多个开发人员同时设计Access应用程序的情况下,您必须:

  • 使用 Microsoft Visual SourceSafe加载项进行Microsoft Access 实现源代码控制,或者

  • 将数据库的 本地工作副本 分发给每个开发人员

实施源代码控制:

Microsoft Access Visual SourceSafe加载项 允许您在开发过程中将Access应用程序置于源代码控制之下。如果您将应用程序置于源代码控制之下,则允许您跟踪和存储随应用程序对应用程序所做的更改。

通过使用 Microsoft Visual SourceSafe ,您可以查看对象的历史记录,然后还原为对象的早期版本。您可以签出Microsoft Access应用程序中的对象,修改它们或在其本地副本中创建新对象,然后在源代码控制下将它们检入主数据库。

要使用 Microsoft Access Visual SourceSafe加载项 ,还必须安装 Microsoft Visual SourceSafe

使用个人工作数据库:

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

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

更多信息:

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

  1. 它提供与其他Visual Basic Environment客户端应用程序的一致性。
  2. 它停止对Jet数据库引擎的依赖。
  3. 它提高了Access特定对象的稳定性。
  4. 下载 Microsoft Access源代码控制并了解详情:

    SourceSafe可能是不推荐使用的技术,具体取决于您的版本。如果您遇到问题,可以选择其他方法,例如: