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

时间:2016-01-05 13:02:04

标签: sql vba ms-access access-vba ms-access-2010

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

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

如果从下拉框Email status中选择了一个选项,其中包含“有效”,“无效”,“取消订阅”等,则查询会匹配具有该值的记录;如果选择“所有状态”,则会获得所有记录。

只要表单打开,这就有效。但是,如果表单未打开,则查询当然无法找到该值并要求用户输入。

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

编辑:作为一种解决方法,我创建了一个重复的查询但没有过滤条件,我可以在不使用该窗体时调用,但我仍然认为更优雅答案不止于此。

1 个答案:

答案 0 :(得分:2)

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

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查询中,在查询执行开始时,只调用一次没有参数的函数。