基于表单的MS-Access过滤报告

时间:2012-12-18 13:30:27

标签: ms-access-2003

需要帮助理解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?

1 个答案:

答案 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)