MS Access报告-使用VBA使用主窗体中的参数修改RecordSource

时间:2018-11-20 20:11:16

标签: ms-access access-vba ms-access-reports

我不知道我最初的帖子(我删除的帖子)是在新手帐户下发布的-抱歉……

无论如何,这是我的问题:

我有一个列出各种“顾问”的主要表格。此主窗体还具有可用于过滤列表的参数“顾问类型”,“开始日期”和“结束日期”。

所需要的是一份报告,其中列出某种类型的“顾问”。请记住,此“类型”过滤器可以应用于4个不同类型字段(“ type1”,“ type2”,“ type3”,“ type4”)中的任何一个。

想要要做的是将运行报表的按钮放在主窗体上,因为“顾问类型”参数已经存在。然后,我想基于该参数(以及我已经完成的date参数)生成SQL,并使用该记录集填充报告。

SQL可以正常工作,但是结果数据没有传递到报表中,所以我得到的是所有记录,而不仅仅是我想要的记录。报表对象的recordsource设置为背景表,以便填充字段/文本框。

这是代码

在主表单上

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中没有任何内容显示“使用此记录集”。那就是我的问题。

我正试图避免创建单独的小下拉菜单,目的是填充我面前的数据。同样,使用Forms![MainForm]![Type] .SQL将SQL直接插入报表的记录源中。“ Type”变量的值也不起作用。我怀疑这可能与单击报告按钮时表单未激活有关?

我认为QueryDef可能有用。但是,为了了解它是否有效,我没有掌握如何实现它。而且我一直在谷歌搜索……

我不知道我在想什么。帮助!

1 个答案:

答案 0 :(得分:0)

AS C Perkins建议在docmd.Openreport中使用where条件

类似

    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