需要帮助理解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之后的代码中插入soime类型的条件语句,但是无法弄清楚如何从表单中传递userid来过滤报告。我的表单有一个包含UserID的文本框“Text31”,我的报告有一个对应于结果的文本框“tstUserID”。在单击cmd按钮之前,如何将报告结果限制为仅显示在“Text31”中的用户ID?
答案 0 :(得分: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语句非常相似的形式。
* The Syntax for Openreport is given as:
DoCmd.OpenReport(ReportName, View, FilterName, _
WhereCondition, WindowMode, OpenArgs)