1

需要帮助了解 DoCmd.OpenReport 函数背后的上下文。我在一个表单上有一个按钮,它生成了一个包含我的数据库表中的所有记录的报告。我希望仅根据表单中显示的信息生成报告。我已经使用向导将命令按钮添加到我的表单以生成摘要报告,这里是自动 VBA。

Private Sub GenRpt_Click()
On Error GoTo Err_GenRpt_Click
Dim stDocName As String
Dim FrmId As String
stDocName = "Summary v2"
DoCmd.OpenReport stDocName, acPreview
Exit_GenRpt_Click:
Exit Sub
Err_GenRpt_Click:
MsgBox Err.Description
Resume Exit_GenRpt_Click
End Sub

我知道我应该在 DoCmd.OpenReport 之后将某种条件语句插入代码中,但无法弄清楚如何从表单中传递用户 ID 以过滤报告。我的表单有一个包含 UserID 的文本框“Text31”,我的报告有一个与结果对应的文本框“tstUserID”。如何在我的 cmd 按钮单击之前将报告结果限制为仅显示在“Text31”中的用户 ID?

4

1 回答 1

2

就像是*:

DoCmd.OpenReport stDocName, acPreview,,"UserID=" & Me.Text31

其中 UserID 是报表记录源中包含的数字字段的名称。

如果字段是文本数据类型,则需要引号:

DoCmd.OpenReport stDocName, acPreview,,"UserID='" & Me.Text31 & "'"

userID 似乎不太可能包含内部引号,因此上述内容应该足够安全,如果可能的话,您需要像这样转义:

DoCmd.OpenReport stDocName, acPreview,,"UserID='" _
    & Replace(Me.Text31,"'","''") & "'"

您正在添加 WHERE 条件,它采用与查询中的 WHERE 语句非常相似的形式。


* Openreport 的语法如下

DoCmd.OpenReport(ReportName, View, FilterName, _
    WhereCondition, WindowMode, OpenArgs)
于 2012-12-18T13:39:49.647 回答