在做一些分类统计的时候(通过组合框更新后事件改变列表窗体SourceObject),如果不同列表窗体的查询字段不同,而主窗体又使用了平台的查询功能,在输入查询条件的时候会出现:错误#2467 SysFrmGeneralQuickQuery: Function ApplyFilter(),无法使用查询功能:
研究了一下,这个问题是因为加载窗体控件时找不到控件引起的(由于不同窗体控件名称不一样),解决思路是选择分类后,清空已加载的查询字段,重新加载。
在窗体加载事件中增加以下红色字体的代码:
Private Sub Form_Load()
On Error GoTo ErrorHandler
LoadIcon Me.btnExport_Image, "export.ico"
LoadIcon Me.btnClose_Image, "db cancel.ico"
Set mclsQuery = New GeneralQuery
With mclsQuery
.QueryForm = Me.sfrQuickQuery.Form
Select Case 查询类型
Case "业务订单月汇总"
Me.sfrList.SourceObject = Me.Name & "_List" & "_销售金额"
.DataForm = Me.sfrList.Form
.ClearFields ’这句是关键,清空查询字段
.AddAllFields ‘这里添加全部查询字段,可以使用AddField添加部分字段
.FieldName = "年月" '设置默认的查询字段
Case "采购订单月汇总"
Me.sfrList.SourceObject = Me.Name & "_List" & "_采购金额"
.DataForm = Me.sfrList.Form
.ClearFields ’这句是关键,清空查询字段
.AddAllFields ‘这里添加全部查询字段,可以使用AddField添加部分字段
.FieldName = "年月" '设置默认的查询字段
End Select
End With
Me.Recalc
ExitHere:
Exit Sub
ErrorHandler:
RDPErrorHandler Me.Name & ": Sub Form_Load()"
Resume ExitHere
End Sub
然后在查询类型的组合框增加一个更新后事件,重新加载窗体:
Private Sub 查询类型_AfterUpdate()
Call Form_Load
End Sub
这样处理后查询功能就正常了。