重新填充子表单Recordset提示查询参数

时间:2016-10-07 16:48:03

标签: ms-access

我有一个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的参数。提供的数据量也禁止我拉出整个表并应用过滤器。

如何防止此行为?

编辑:为了澄清,我必须使用存储的查询作为业务需求。

2 个答案:

答案 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