断开引用数据库的链接

时间:2014-05-07 19:42:41

标签: vba access-vba ms-access-2010

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

为了找到解决方法,我按如下方式设置了测试环境:

  1. C:\ DB Test \ 中创建了两个空白Access 2010数据库文件
    • 本地DB.accdb
    • 网络DB.accdb
  2. 将模块 LocalCode 添加到本地DB.accdb
  3. 将模块 RemoteCode 添加到网络DB.accdb
  4. 本地DB.accdb
  5. 中添加了对 Microsoft Visual Basic for Applications Extensibility 5.3 的引用
  6. 本地DB.accdb 中添加了对 C:\ DB Test \ Network DB.accdb 的引用
    • 此引用将网络数据库添加到我的VBA编辑器的项目列表中,就像文件已打开一样。
  7. 本地DB.accdb
  8. 中的 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 的库引用,但无法删除网络数据库<的项目/ strong>即可。它好像两个文件之间有一个鬼链接,但我不确定是什么原因导致它或下一步尝试什么。

2 个答案:

答案 0 :(得分:1)

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

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

这样,服务器上的'master'永远不会被锁定。当然,您不会修改此文件,您将使用开发副本,然后替换服务器上的主文件。

ps,'master'应该是一个accde文件。

答案 1 :(得分:0)

为什么两个DB都不能坐在服务器上?

略有不同的情况,但我们总是将前端和后端放在带有accdb的服务器上 - 这样就不会出现网络丢失的问题。还可以提高性能并消除在本地PC上备份文件的需要。