子窗体Requery偶现失效,设置RecordSource触发“事件不支持”错误
解决Access子窗体设置RecordSource时报错的问题
首先,咱们来拆解这个报错“object or class does not support set of events”的常见原因,结合你的代码来看,主要有几个可排查的点:
1. SQL语句存在语法问题
你的SQL连接部分写了tblAppointments.[Job Number].Value,但在SQL查询里不需要加.Value——这是VBA里引用控件/字段值的写法,直接写字段名tblAppointments.[Job Number]就可以了。另外,日期字段用LIKE查询容易出类型不匹配的问题,建议先把日期格式化为文本再做匹配。
同时,WHERE子句里的多个OR条件最好用括号括起来,避免和JOIN的逻辑产生冲突。
2. 子窗体的引用方式可能有问题
有时候直接访问Me.subCustomerList.Form.RecordSource会因为子窗体未完全加载或者引用层级问题报错,你可以尝试直接设置子窗体控件的RecordSource属性(Access里子窗体控件本身就支持这个属性),或者先确认子窗体已经加载完成。
3. 修正后的完整代码
我把你的代码调整了一下,修复了上面提到的问题,还加了一些严谨性处理:
Private Sub btnSearch_Click() Dim sql As String ' 处理空关键词的情况,避免无效查询 Dim searchKeyword As String searchKeyword = Nz(Me.txtKeywords, "") If searchKeyword = "" Then MsgBox "请输入搜索关键词" Exit Sub End If sql = "SELECT tblCustomer.[Job ID], tblCustomer.[Customer Name], tblCustomer.[Street Name], " & _ "tblCustomer.Area, tblAppointments.[Appointment Date] " & _ "FROM tblCustomer " & _ "LEFT JOIN tblAppointments ON tblCustomer.[Job ID] = tblAppointments.[Job Number] " & _ "WHERE ([Customer Name] LIKE '*" & searchKeyword & "*' " & _ "OR [Job ID] LIKE '*" & searchKeyword & "*' " & _ "OR [Street Name] LIKE '*" & searchKeyword & "*' " & _ "OR [Area] LIKE '*" & searchKeyword & "*' " & _ "OR Format(tblAppointments.[Appointment Date], 'yyyy-mm-dd') LIKE '*" & searchKeyword & "*') " & _ "ORDER BY tblAppointments.[Appointment Date];" ' 打印SQL到立即窗口,方便调试(按Ctrl+G打开查看) Debug.Print sql ' 直接设置子窗体控件的RecordSource Me.subCustomerList.RecordSource = sql Me.subCustomerList.Requery End Sub
实用调试技巧
在代码里加Debug.Print sql后,点击搜索按钮,再按Ctrl+G打开立即窗口,把生成的SQL复制到Access的查询设计里直接运行,就能快速发现SQL是否有语法错误——这是排查Access SQL问题最有效的方法之一。
内容的提问来源于stack exchange,提问作者Dayle Angus
相关产品推荐
相关产品推荐

