我可以通过某种方式从报告中检测出哪种形式调用了该报告?
我有一个表单,用于选择几个用于为各种报告构建WhereCondition的条件。在“加载时”报告中,我测试调用表单是否打开。如果它是打开的,我将选择要显示在报告标题中的选择条件。如果未打开,则显示诸如“ Species:All”之类的内容,而不是诸如“ Species:Blue-tailed damselfly”之类的内容。在这种特殊情况下可以正常工作,但感觉有点片状。我想知道是什么调用了该报告,以防万一在将来某个更复杂的系统中,可以从不同位置调用该报告。我知道在子表单中可以使用父表单,但在这种情况下不适用。
答案 0 :(得分:1)
您有一个表单,用户可以在其中选择用于构建 WhereCondition 的条件,该条件用于过滤报告。不要要求报告重新检查表单标准,以便为其自身生成适当的标题。用与构建 WhereCondition 相同的表单过程构建标题字符串。然后,当您调用OpenReport
时,将该字符串作为 OpenArgs 传递。
例如,如果对物种没有限制:
strHeader = "Species: All"
或针对所选物种:
strHeader = "Species: Blue-tailed damselfly"
然后在打开报告时通过strHeader
:
DoCmd.OpenReport ReportName:="YourReport", _
View:=acViewReport, _
WhereCondition:=strWhere, _
OpenArgs:=strHeader
在报告的加载事件中,您可以检查是否在 OpenArgs 中得到了东西并使用它:
If Len(Me.OpenArgs) > 0 Then
' do what you want with it '
End If
这种方法使报告独立于任何特定形式。如果重命名当前表单或为报表选择条件创建其他表单,该策略不会中断。
当报告标准预先标准化时,您甚至可以指定适当的标题。例如,一个命令按钮标题为“查看昨天的添加物”:
strWhere = "[Date_Added] >= (Date() - 1) AND [Date_Added] < Date()"
strHeader = "Species Added Yesterday"
DoCmd.OpenReport ReportName:="YourReport", _
View:=acViewReport, _
WhereCondition:=strWhere, _
OpenArgs:=strHeader