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

如何断开MS Access本地表获取的Recordset?DAO/ADODB问题求助

解决方案:Access中断开式Recordset的正确实现

一、DAO.Recordset断开连接的正确方式

你之前的代码报错,是因为CurrentDb.OpenRecordset创建的记录集,其Connection对象与当前数据库上下文绑定,无法直接关闭。正确做法是手动创建独立的DAO.Connection对象,通过它打开记录集后再断开:

Sub CreateDisconnectedDAORS()
    Dim db As dao.Database
    Dim rs As dao.Recordset
    Dim conn As dao.Connection
    
    ' 创建独立连接
    Set conn = New dao.Connection
    conn.Open CurrentProject.FullName ' 连接到当前Access数据库
    
    ' 通过独立连接打开记录集
    Set rs = conn.OpenRecordset("MyLocalTable", dbOpenDynaset)
    
    ' 断开连接:先清空记录集的Connection引用,再关闭连接
    Set rs.ActiveConnection = Nothing
    conn.Close
    Set conn = Nothing
    
    ' 此时rs就是断开式记录集,可赋值给表单
    Set Me.Recordset = rs
End Sub

关键说明:

  • 必须使用独立的DAO.Connection,而非CurrentDb隐式创建的连接
  • 断开时要先设置rs.ActiveConnection = Nothing,再关闭连接,避免记录集与连接绑定

二、ADODB.Recordset的实现方法

要从Access本地/链接表获取ADODB断开式记录集,核心是设置CursorLocation = adUseClient(客户端游标):

1. 引用ADODB库

先在VBA编辑器中引用Microsoft ActiveX Data Objects x.x Library(推荐选最新版本,如6.1)

2. 代码示例

Sub CreateDisconnectedADODBRS()
    Dim rs As ADODB.Recordset
    Dim connStr As String
    
    ' 构建Access连接字符串
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentProject.FullName & ";"
    
    Set rs = New ADODB.Recordset
    With rs
        .CursorLocation = adUseClient ' 必须设置为客户端游标才能断开
        .Open "MyLocalTable", connStr, adOpenStatic, adLockOptimistic
        
        ' 断开连接
        Set .ActiveConnection = Nothing
    End With
    
    ' 赋值给表单
    Set Me.Recordset = rs
End Sub

链接表的处理

如果是链接表,直接使用链接表名称即可,连接字符串无需修改——Access会自动处理链接表的底层连接,你只需像操作本地表一样指定表名。

三、表单赋值注意事项

将断开式记录集赋值给表单时,确保:

  • 表单的RecordsetType属性设置为0-动态集或1-快照(匹配你的记录集类型)
  • 避免在表单的Load或Open事件中同时使用RecordSource属性,两者冲突会导致崩溃

内容的提问来源于stack exchange,提问作者Ілля Марко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:40:10