我有一个Continuous子窗体,可根据一系列查询过滤数据。然后我需要根据一些数据填充我在页脚中放置的子表单,并且我已经制作了一个查询来完成此操作。
Private Sub UpdateXXXXX_Info()
If (Me.FormFooter.Visible <> True) Then
Me.FormFooter.Visible = True
End If
MsgBox "query start"
LabelXXXXX_.Caption = "XXXXX for: " & Me.[XXXXX__NAME] & " " & Me.[XXXXX__NAME] & " " & Me.[XXXXX__CATEGORY_NAME]
With CurrentDb.QueryDefs("XXXXX_Query")
.Parameters("XXXXXParam") = Me.[XXXXX_NAME]
.Parameters("XXXXXCategoryParam") = Me.[XXXXX_CATEGORY_NAME]
Set Me.XXXXX__Subform.Form.Recordset = .OpenRecordset
.Close
MsgBox "query complete"
End With
End Sub
从与连续表单上的每个控件绑定的Click事件调用。这很好用,并按我的预期过滤。
由于连续形式的性质(它本身是另一种形式的子形式),整个连续形式可能需要刷新:
Private Sub Form_Current()
Me.FormFooter.Visible = False
End Sub
刷新数据时会出现问题。它第一次按预期工作,但是单击顶部连续形式中的另一个记录会导致子窗体提示查询参数。根据测试,它在设置Me.FormFooter.Visible = True
时执行此操作;虽然在Current事件中 not 设置Visible = False
会绕过这个(这会产生其他不良行为)。
Access不会让我。关闭Recordset,或以其他方式将其设置为空值或空值。我也找不到任何方法来设置Requery的参数。提供的数据量也禁止我拉出整个表并应用过滤器。
如何防止此行为?
编辑:为了澄清,我必须使用存储的查询作为业务需求。
答案 0 :(得分:1)
使用SQL语句来代替(重新)创建子表单的记录源。
SQL = "SELECT * FROM xQuery WHERE xParam = '" & me!Name & "'" AND " & _
"xCategoryParam = '" & me!CategoryName & """
me!subform.form.recordsource = SQL
这消除了打开/关闭记录集的任何要求,并且避免了必须更改原始查询定义。 (即创建无参数查询,SQL中的WHERE命令为您带来了沉重的负担。
答案 1 :(得分:0)
啊哈!
geeFlo的回答向我指出了表单的RecordSource
属性。玩弄它,我能够想出以下内容:
Private Sub ClearXXXXXInfo()
If Me.FormFooter.Visible = True Then
Me.XXXXX_Subform.Form.RecordSource = ""
Me.FormFooter.Visible = False
End If
End Sub
Private Sub Form_Current()
ClearXXXXXInfo
End Sub