当从表单获得的值不可用时指定默认值
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 查询中,不带参数的函数仅在查询执行开始时被调用一次。
我在 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 查询中,不带参数的函数仅在查询执行开始时被调用一次。