关于ms访问:根据主窗体上的复选框查询子报表

Query SubReport based on checkboxes on Main Form

我具有以下主窗体" Edit Services"和一个子窗体" Edit Services SubForm":

enter

I.E。如果选中了"商店"框,则它应在子表单中过滤所有具有"商店"的内容。如果未选中,则应清除过滤器。

答案

1
2
3
4
5
6
7
Private Sub chbxInShop_Click()
    If Me.chbxInShop.Value Then
        Me.[Edit Services SubForm].Form.Filter ="[SrvInShop] = True"
        Me.[Edit Services SubForm].Form.FilterOn = True
        Me.[Edit Services SubForm].Form.Requery
    End If
End Sub


根据您的示例数据库,似乎代码的True和False条件颠倒了。例如,以下行的意思是"如果chbxInShop为False(未选中),则执行以下操作",这将应用子窗体过滤器。但是您真的想在选中复选框时应用过滤器...这意味着其.Value为True(-1)。

1
If Me.chbxInShop.Value = 0 Then

我使用表单为复选框的After Update事件测试了以下代码,它符合我的要求。

1
2
3
4
5
6
7
8
9
10
11
12
Private Sub chbxInShop_AfterUpdate()
    Dim strFilter As String

    strFilter = vbNullString ' make it explicit
    If Me.chbxInShop.Value = True Then
        strFilter ="[SrvInShop] = True"
    End If
    With Me.[Edit Services SubForm].Form
        .Filter = strFilter
        .FilterOn = Me.chbxInShop.Value
    End With
End Sub

如果稍后您决定要基于表单的所有4个复选框的值来选择子表单过滤器,则需要检查每个复选框并创建一个适当的Filter字符串,该字符串可能会像...

1
strFilter ="[SrvInShop] = True AND [SrvSmallBusiness] = True"

答案在原始帖子中。我给SubForm贴了错误标签...