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

Access 2016子窗体网格组合框输入过滤后选项消失问题求助

问题分析与解决

你的问题出在数据表视图子窗体中ComboBox的事件逻辑处理不当,核心问题点如下:

  1. AfterUpdate事件里多余的Dropdown和SetFocus操作,会干扰控件在数据表视图中的状态切换,导致选项被意外清空。
  2. 切换记录或重新编辑已选内容时,控件未主动重置数据源,残留的过滤条件或异常状态会让选项显示空白。
  3. 数据表视图下ComboBox的Change事件触发逻辑和单窗体不同,缺少进入控件时的数据源初始化步骤。

修改后的代码

Option Compare Database
Private Const RecordSQL As String = "SELECT ConID, ItemNo, Description FROM Consignment"

Public Sub FilterComboAsYouType(combo As ComboBox, defaultSQL As String, lookupField As String)
    Dim strSQL As String
    Dim searchText As String
    
    ' 去除输入文本前后空格,避免无效过滤
    searchText = Trim(combo.Text)
    
    If Len(searchText) > 0 Then
        ' 参数化拼接SQL,避免注入风险
        strSQL = defaultSQL & " WHERE " & lookupField & " LIKE '*' & ? & '*'"
        combo.RowSource = strSQL
        combo.RowSourceArgs = searchText
    Else
        strSQL = defaultSQL
        combo.RowSource = strSQL
    End If
    combo.Dropdown
End Sub

Private Sub Select_Item_AfterUpdate()
    ' 仅重置数据源并刷新,移除干扰性操作
    Select_Item.RowSource = RecordSQL
    Select_Item.Requery
End Sub

Private Sub Select_Item_Change()
    FilterComboAsYouType Me.Select_Item, RecordSQL, "Description"
End Sub

' 新增Enter事件,确保进入控件时重置数据源
Private Sub Select_Item_Enter()
    Select_Item.RowSource = RecordSQL
    Select_Item.Requery
End Sub

关键调整说明

  • 新增Enter事件:每次点击ComboBox进入编辑状态时,强制重置为默认数据源,确保切换记录后控件能正常加载所有选项。
  • 优化过滤逻辑:用Trim处理输入文本,避免空格导致的无效过滤;改用参数化SQL拼接,规避注入风险的同时保证逻辑稳定性。
  • 简化AfterUpdate事件:移除Dropdown和SetFocus,这两个操作在数据表视图中会打乱控件的正常状态流转,是选项空白的直接诱因。
  • 明确数据源重置时机:无论是进入控件还是选择完成后,都保证数据源回到默认状态,避免残留过滤条件导致无数据显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:25:17