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

MS Access用ADODB.Recordset填充列表框选中项后执行崩溃问题

解决Access列表框重新绑定Recordset时崩溃的问题

核心原因

当列表框存在选中项时,直接替换其Recordset属性,Access控件内部可能仍持有对旧记录集的引用,或是选中状态与新记录集的结构、数据产生冲突,进而导致无提示崩溃。

具体修复方案

方案1:重新绑定前清空选中状态并解除旧记录集绑定

修改代码,在设置新Recordset前先重置列表框状态,切断旧引用:

Dim CONSTRING As String
Dim SQL As String
Dim RSSQL As New ADODB.Recordset

CONSTRING = "xxxxxxxxxx"

' 先清空选中项并解除旧记录集绑定
With Forms!Cockpit.LB
    .Value = Null
    Set .Recordset = Nothing
End With

SQL = "SELECT [ID], [Name] FROM [Table X] WHERE Name <>'' ORDER BY [Name] ASC;"
RSSQL.Open SQL, CONSTRING, adOpenStatic, adLockBatchOptimistic, adCmdText

Set Forms!Cockpit.LB.Recordset = RSSQL

RSSQL.Close
Set RSSQL = Nothing

方案2:改用RowSource绑定数据

如果业务场景允许,切换为通过SQL语句设置RowSource的方式,Access对这种绑定方式的控件状态管理更稳定:

Dim CONSTRING As String
Dim SQL As String

CONSTRING = "xxxxxxxxxx"
SQL = "SELECT [ID], [Name] FROM [Table X] WHERE Name <>'' ORDER BY [Name] ASC;"

With Forms!Cockpit.LB
    .Value = Null ' 清除选中项
    .RowSourceType = "Table/Query"
    .RowSource = SQL
    .Requery ' 强制刷新数据
End With

方案3:调整记录集锁类型

原代码使用的adLockBatchOptimistic适用于批量更新场景,若不需要修改权限,改用更轻量的adLockReadOnly可减少控件与记录集的交互冲突:

RSSQL.Open SQL, CONSTRING, adOpenStatic, adLockReadOnly, adCmdText

额外注意事项

  • 确保代码执行时,窗体和列表框控件已处于加载状态,避免引用未初始化的对象。
  • 若使用32位Access,检查ADODB驱动与Office版本的兼容性,部分旧驱动可能存在此类绑定冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:13:20