如何断开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,提问作者Ілля Марко
相关产品推荐
相关产品推荐

