MS Access 报告 - 使用主窗体中的参数修改 VBA 的 RecordSource
MS Access Report - Modify RecordSource with VBA Using Parameter from Main Form
我没有意识到我最初的 post(我删除了)是 post在一个新手帐户下 - 抱歉......
无论如何,这是我的问题:
我有一个主窗体,列出了各种 "Consultants." 这个主窗体还有参数 "Consultant Type" "Start Date" 和 "End Date" 可以用来过滤列表。
需要的是一份报告,其中列出了某种类型的 "Consultants"。请记住,此 "type" 过滤器可以应用于 4 个不同类型字段中的任何一个("type1"、"type2"、"type3"、"type4")。
我想要做的是将运行报表的按钮放在主窗体上,因为 "Consultant Type" 参数已经存在。然后我想根据该参数(以及我已经完成的日期参数)生成 SQL,并使用该记录集填充报告。
SQL 工作正常,但是结果数据没有传递给报告,所以我得到 所有 记录,而不仅仅是那些我想。报表对象的recordsource设置为后台table为了填充fields/textboxes.
这是代码
在主窗体上
Private Sub Button_Click()
Dim s As String
If IsNull(Me.Type.Value) Then
MsgBox "Please Select a Type", vbCritical, "Report Error"
Else
s = "Select Consultant.* from Consultant "
s = s & "Where ((consultant.typeone = '" & Me.Type.Value & "') OR (Consultant.typetwo = '" & Me.Type.Value & "') OR (Consultant.typethree = '" & Me.Type.Value & "') OR (Consultant.typefour = '" & Me.Type.Value & "'))"
s = s & "And (((Consultant.[End date]) <= DateAdd(""d"", -730, Now()))) ORDER BY Consultant.Last_Name"
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog
End If
结束子
现在,显然,当我打开报告时,一切都变得糟糕了,因为 DoCmd 中没有任何内容表明 "Using this recordset." 这就是我的问题。
我试图避免创建一个单独的小下拉表单来填充我面前的一段数据。此外,使用 Forms![MainForm]![Type].Value "Type" 变量将 SQL 直接插入到报表的记录源中也不起作用。我怀疑这可能与单击报告按钮时表单未激活有关?
我认为 QueryDef 可能有用。但是,我没有掌握如何实施它,以便知道它是否有效。而且我一直在谷歌搜索......
我不知道我错过了什么。帮助!
AS C Perkins 建议在 docmd.Openreport
中使用 wherecondition
类似
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog, wherecondition:="consultant.typeone = " & Me.Type.Value
另一种方法是您可以使用 Query def 创建对象,并使用它根据用户选择的条件在 运行 时间更改您的查询。
这样试试
在 MsAccess 中保存 Report_Query 并将此查询用作报告的记录源
Dim s as string
s = "Select Consultant.* from Consultant "
s = s & "Where ((consultant.typeone = '" & Me.Type.Value & "') OR (Consultant.typetwo = '" & Me.Type.Value & "') OR (Consultant.typethree = '" & Me.Type.Value & "') OR (Consultant.typefour = '" & Me.Type.Value & "'))"
s = s & "And (((Consultant.[End date]) <= DateAdd(""d"", -730, Now()))) ORDER BY Consultant.Last_Name"
CurrentDb.QueryDefs("Report_Query").sql = s
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog
我没有意识到我最初的 post(我删除了)是 post在一个新手帐户下 - 抱歉......
无论如何,这是我的问题:
我有一个主窗体,列出了各种 "Consultants." 这个主窗体还有参数 "Consultant Type" "Start Date" 和 "End Date" 可以用来过滤列表。
需要的是一份报告,其中列出了某种类型的 "Consultants"。请记住,此 "type" 过滤器可以应用于 4 个不同类型字段中的任何一个("type1"、"type2"、"type3"、"type4")。
我想要做的是将运行报表的按钮放在主窗体上,因为 "Consultant Type" 参数已经存在。然后我想根据该参数(以及我已经完成的日期参数)生成 SQL,并使用该记录集填充报告。
SQL 工作正常,但是结果数据没有传递给报告,所以我得到 所有 记录,而不仅仅是那些我想。报表对象的recordsource设置为后台table为了填充fields/textboxes.
这是代码
在主窗体上
Private Sub Button_Click()
Dim s As String
If IsNull(Me.Type.Value) Then
MsgBox "Please Select a Type", vbCritical, "Report Error"
Else
s = "Select Consultant.* from Consultant "
s = s & "Where ((consultant.typeone = '" & Me.Type.Value & "') OR (Consultant.typetwo = '" & Me.Type.Value & "') OR (Consultant.typethree = '" & Me.Type.Value & "') OR (Consultant.typefour = '" & Me.Type.Value & "'))"
s = s & "And (((Consultant.[End date]) <= DateAdd(""d"", -730, Now()))) ORDER BY Consultant.Last_Name"
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog
End If
结束子
现在,显然,当我打开报告时,一切都变得糟糕了,因为 DoCmd 中没有任何内容表明 "Using this recordset." 这就是我的问题。
我试图避免创建一个单独的小下拉表单来填充我面前的一段数据。此外,使用 Forms![MainForm]![Type].Value "Type" 变量将 SQL 直接插入到报表的记录源中也不起作用。我怀疑这可能与单击报告按钮时表单未激活有关?
我认为 QueryDef 可能有用。但是,我没有掌握如何实施它,以便知道它是否有效。而且我一直在谷歌搜索......
我不知道我错过了什么。帮助!
AS C Perkins 建议在 docmd.Openreport
中使用 wherecondition类似
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog, wherecondition:="consultant.typeone = " & Me.Type.Value
另一种方法是您可以使用 Query def 创建对象,并使用它根据用户选择的条件在 运行 时间更改您的查询。
这样试试
在 MsAccess 中保存 Report_Query 并将此查询用作报告的记录源
Dim s as string
s = "Select Consultant.* from Consultant "
s = s & "Where ((consultant.typeone = '" & Me.Type.Value & "') OR (Consultant.typetwo = '" & Me.Type.Value & "') OR (Consultant.typethree = '" & Me.Type.Value & "') OR (Consultant.typefour = '" & Me.Type.Value & "'))"
s = s & "And (((Consultant.[End date]) <= DateAdd(""d"", -730, Now()))) ORDER BY Consultant.Last_Name"
CurrentDb.QueryDefs("Report_Query").sql = s
DoCmd.OpenReport "RptList", acViewPreview, , , acDialog