断开与引用数据库的链接

Posted

技术标签:

【中文标题】断开与引用数据库的链接【英文标题】:Break link to referenced database 【发布时间】:2014-05-07 19:42:41 【问题描述】:

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

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

    C:\DB Test\ 中创建了两个空白 Access 2010 数据库文件 本地 DB.accdb 网络 DB.accdb 将模块 LocalCode 添加到 Local DB.accdb 将模块 RemoteCode 添加到 Network DB.accdbLocal DB.accdb 中添加了对 Microsoft Visual Basic for Applications Extensibility 5.3 的引用 在 Local DB.accdb 中添加了对 C:\DB Test\Network DB.accdb 的引用 此引用将 Network DB 添加到我的 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 的项目>。就好像这两个文件之间有一个幽灵链接,但我不确定是什么导致了它或接下来要尝试什么。

【问题讨论】:

感谢您提出格式良好的好问题。欢迎使用 Stack Overflow! 取消选中文件>>选项>>当前数据库下的“打开独占”? @enderland 谢谢你的夸奖。我很荣幸。 @ckuhn203 我在文件>>选项>>当前数据库下没有看到“打开独占”选项。 如果先删除 VBA 项目引用会怎样? 【参考方案1】:

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

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

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

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

【讨论】:

您提出了一个非常有创意的想法。不幸的是,这个问题的项目被搁置了,我目前无法进行任何进一步的测试。当我们恢复项目时,我会看到我可以完成这项工作。【参考方案2】:

有什么原因导致两个数据库都不能坐在服务器上?

稍微不同的场景,但我们总是将前端和后端放在带有 accdb 的服务器上 - 这样就不会出现网络中断带来的问题。还提高了性能并消除了在本地 PC 上备份文件的需要。

【讨论】:

不幸的是,您的建议并不能解决根本问题。如果有人打开前端文件,它仍将被锁定以进行编辑。而且,它必须在进行任何更改之前关闭。我追求的是一种切换本地/网络数据库之间链接的方法。

以上是关于断开与引用数据库的链接的主要内容,如果未能解决你的问题,请参考以下文章

如果 Access 与 MySQL 数据库服务器断开连接,如何刷新链接表?

跟踪图像文件的链接或引用并删除未使用的文件(PHP/数据库)

如何用Sql语句实现断开使用本数据库的链接的功能?

SQL Server2005还原数据库之前,怎么断开所有的用户链接?

简析TCP的三次握手与四次断开

2018-03-26(websocket自动断开连接)