我一直在寻找一段时间来查看是否可以通过在表单中使用查找字段来限制报表中的结果。首先,一点背景。我正在建立一个数据库来存储联盟大学的建筑物的可访问性信息。我需要能够生成一份报告,显示建筑物具有哪些用户选择的质量,例如斜坡访问或人员接收。
我已将所有这些功能存储在自己的表中,以便用户可以编辑它们,然后使用查找字段为建筑物选择这些功能。现在的问题是运行查询以生成报告。
如果我对...WHERE [Buildings].[Accessibility Features].Value = 2 AND [Buildings].[Accessibility Features].Value = 8;
这样的查询的值进行硬编码,我会得到明智的结果。如果我使用IN()
函数(我必须使用DoCmd.OpenReport()
函数处理该字段),我将返回所有 功能2 的建筑物功能8,不是那么方便。在将AND语句串联起来时,前面提到的DoCmd.OpenReport()
函数似乎不起作用。
我已经尝试使用VBA来汇编SQL代码,如下所示(将参数提供给Criteria框,前面是相应的语句):
If Me.BuildingFeatSelect.ItemsSelected.Count = 0 Then
MsgBox "Must select at least one feature"
Exit Sub
End If
Set ctl = Me.BuildingFeatSelect
For Each varItem In ctl.ItemsSelected
strWhere = strWhere & ctl.ItemData(varItem) & " AND Buildings.[Accessibility Features].Value = "
Next varItem
strWhere = Left(strWhere, Len(strWhere) - 48)
MsgBox strWhere, , Output
Dim qdf As QueryDef
Dim rst As Recordset
Set qdf = CurrentDb.QueryDefs("Copy of Building Features 2")
qdf.Parameters(0) = strWhere
Set rst = qdf.OpenRecordset
rst.Close
qdf.Close
Set rst = Nothing
Set qdf = Nothing
这让我无处可逃。它只是抛出有关参数类型的错误。我尝试使用参数窗口设置类型,但这不起作用。
是否有一种基于查询框中的多个条目生成报告的有效方法?
感谢您的帮助,对不起这个长期的问题感到抱歉。
答案 0 :(得分:0)
好的,你得到了正确的一半。您可以向查询提供参数,查询使用的每个参数都有一个值 在您的查询中,您只使用一个参数,并为其分配一个字符串。这不是使用参数的正确方法。您最好构建一个SQL选择并根据您创建的字符串对其进行过滤。
Dim qdf As QueryDef
Dim rst As Recordset
Set qdf = CurrentDb.CreateQueryDef("", "SELECT * from tblBuildingFeatures WHERE [Accessibility Features]=" & strWhere & ";")
Set rst = qdf.OpenRecordset
这将过滤查询。