当从表单获得的值不可用时指定默认值

Specify a default value when a value gained from a form is not available

我在 Access 2010 中有一个查询,它使用表单中的值作为其条件之一:

WHERE (Contactnames.[Email status])=[Forms]![Reports]![Email status] OR [Forms]![Reports]![Email status])="All statuses"

如果从包含"Valid"、"Invalid"、"Unsubscribed"等的下拉框Email status中选择一个选项,则查询匹配具有该值的记录;如果选择 "All statuses",您将获得所有记录。

只要表单打开,它就可以工作。但是,如果表单未打开,查询当然找不到值并要求用户输入。

如果通常提供值的表单未打开,是否有任何方法可以指定默认值?如果这超出了 Access 的 SQL 引擎的正常功能,我很乐意与 VBA 合作。

编辑: 作为一种解决方法,我创建了一个重复的查询,但没有在未使用该表单时可以调用的过滤条件,但我会仍然重视比那个更优雅的答案。

我会使用全局函数。在标准模块中,输入代码:

Public Function GetReportsEmailStatus() As Variant
    Dim oControl As Access.Control
    On Error Resume Next        
    Set oControl = Application.Forms("Reports").Controls("Email status")
    If Err = 0 Then
        GetReportsEmailStatus = oControl.Value
    Else
        GetReportsEmailStatus = "All statuses"
    End If
End Function

然后,在您的查询中:

WHERE (Contactnames.[Email status]) = GetReportsEmailStatus() 
OR GetReportsEmailStatus() = "All statuses"

这是高效的,因为在 Access 查询中,不带参数的函数仅在查询执行开始时被调用一次。