You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access 2013 DSNLess连接SQL Server断连后丢失表链接问题求助

Access前端DSNLess连接SQL Server后部分表链接丢失的解决方案

一、可能的触发原因

  • 网络恢复时的连接时序冲突:Access在重连阶段会批量尝试恢复表链接,若前几个表的连接请求未及时得到SQL Server响应,Access会直接标记这些链接失效。
  • 本地连接元数据损坏:网络中断瞬间,Access缓存的部分表连接信息可能出现损坏,恢复后无法自动修复。
  • SQL Server连接池过载:网络恢复时大量前端同时发起重连请求,超出SQL Server连接池的承载上限,导致部分连接被拒绝,对应表的链接丢失。

二、自动检查并重连的VBA代码

以下代码可遍历所有链接表,验证连接有效性,失效则自动重新建立DSNLess链接:

Sub RefreshLinkedSQLTables()
    Dim tdf As TableDef
    Dim strConn As String
    ' 替换为你的DSNLess连接参数
    strConn = "ODBC;DRIVER={SQL Server Native Client 11.0};" & _
              "SERVER=你的服务器名称;" & _
              "DATABASE=你的数据库名称;" & _
              "Trusted_Connection=Yes;"
    
    For Each tdf In CurrentDb.TableDefs
        ' 过滤本地表和系统表,只处理链接表
        If tdf.Connect <> "" And Left(tdf.Name, 4) <> "MSys" Then
            On Error Resume Next
            ' 通过打开快照验证连接状态
            tdf.OpenRecordset dbOpenSnapshot, dbReadOnly
            If Err.Number <> 0 Then
                ' 连接失效,重新设置链接
                tdf.Connect = strConn
                tdf.RefreshLink
                Debug.Print "已修复链接: " & tdf.Name
            End If
            On Error GoTo 0
        End If
    Next tdf
    MsgBox "链接检查与修复完成", vbInformation
End Sub

注意事项

  • 替换代码中的SERVER和DATABASE为实际值,驱动可根据你的环境调整(比如用{ODBC Driver 17 for SQL Server}适配新版本SQL Server)。
  • 可以把这个宏绑定到前端的启动事件,或者通过窗体计时器定时执行,确保每次打开前端或定期检查链接状态。

三、预防措施

  • 前置连接测试:在前端执行任何数据操作前,先跑一个简单的测试查询(比如SELECT 1 FROM 任意小表),确认连接有效后再进行后续操作。
  • 调整SQL Server连接池:联系管理员增大连接池的最大容量,避免瞬间重连导致的请求被拒。
  • 避开高风险时段:如果业务允许,尽量不在网络不稳定或停电高发时段执行批量数据操作。

内容的提问来源于stack exchange,提问作者Mel Forsyth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:45:38