我正在使用两个Access 2010数据库。一台保存在我们公司的文件服务器上,另一台保存在本地的多台PC上。我想将我的VBA代码存储在网络数据库中,并将该文件用作本地副本的引用库。但是,使用该配置,只要打开本地副本,网络文件就被锁定以进行编辑。使用VBA,是否可以在不关闭本地文件的情况下断开两个文件之间的链接?

为了找到一种解决方法,我设置了一个测试环境,如下所示:

  • C:\DB Test\中创建了两个空白的Access 2010数据库文件
  • 本地DB.accdb
  • 网络DB.accdb
  • 已将模块 LocalCode 添加到 Local DB.accdb
  • 已将模块 RemoteCode 添加到 Network DB.accdb
  • 本地DB.accdb中添加了对的引用,该引用是对Microsoft Visual Basic for Applications Extensibility 5.3 的引用。accdb
  • 中添加了对 C:\DB Test\Network DB.accdb 的引用本地DB.accdb
  • 此引用将网络数据库添加到了我的VBA编辑器的项目列表中,就好像该文件已打开一样。
  • Local DB.accdb
  • 中的 LocalCode 模块中添加了以下过程

    Public Sub ClearDBReference()
    
        Dim DBFile As String
        Dim Proj   As VBIDE.VBProject
        Dim Ref    As Access.Reference
    
        DBFile = "C:\DB Test\Network DB.accdb"
    
        For Each Ref In Application.References
            If Ref.FullPath = DBFile Then
    
                ' Successfully removes the library
                ' reference to the network database
                Application.References.Remove Ref
                Exit For
    
            End If
        Next
    
        For Each Proj In Application.VBE.VBProjects
            If Proj.FileName = DBFile Then
                ' Run-time error '440': Method 'Remove'
                ' of object '_VBProjects' failed
                Application.VBE.VBProjects.Remove Proj
    
            End If
    
        Next
    
        Set Ref = Nothing
        Set Proj = Nothing
    End Sub
    

    当我执行ClearDBReference时,它成功删除了对 C:\DB Test\Network DB.accdb 的库引用,但是无法删除 Network DB 的项目。好像两个文件之间有一个幽灵链接,但我不确定是什么原因引起的,或者下一步该怎么做。

    最佳答案

    不能完全确定我了解您的情况,但听起来您仅是在指前端(FE)应用程序/数据库?

    如果是这样,则可以为本地计算机创建一个 stub 应用程序,该 stub 应用程序每次运行时仅将FE复制到用户的计算机上,打开真正的FE应用程序,然后关闭 stub 应用程序。

    这样,服务器上的“主服务器”就不会被锁定。当然,您不会修改此文件,而是在开发副本上工作,然后替换服务器上的主文件。

    ps,“master”应该是accde文件。

    09-12 04:25