我在Access 2010中有一个查询,它使用表单中的值作为其标准之一:
WHERE (Contactnames.[Email status])=[Forms]![Reports]![Email status] OR [Forms]![Reports]![Email status])="All statuses"
如果从下拉框Email status
中选择了一个选项,其中包含“有效”,“无效”,“取消订阅”等,则查询会匹配具有该值的记录;如果选择“所有状态”,则会获得所有记录。
只要表单打开,这就有效。但是,如果表单未打开,则查询当然无法找到该值并要求用户输入。
如果通常提供该值的表单未打开,是否有任何指定默认值的方法?如果这超出了Access'SQL引擎的正常功能,我很高兴与VBA合作。
编辑:作为一种解决方法,我创建了一个重复的查询但没有过滤条件,我可以在不使用该窗体时调用,但我仍然认为更优雅答案不止于此。
答案 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查询中,在查询执行开始时,只调用一次没有参数的函数。