使用查看字段过滤Access

时间:2016-12-06 23:03:38

标签: sql-server ms-access access-vba

我一直在寻找一段时间来查看是否可以通过在表单中​​使用查找字段来限制报表中的结果。首先,一点背景。我正在建立一个数据库来存储联盟大学的建筑物的可访问性信息。我需要能够生成一份报告,显示建筑物具有哪些用户选择的质量,例如斜坡访问或人员接收。

我已将所有这些功能存储在自己的表中,以便用户可以编辑它们,然后使用查找字段为建筑物选择这些功能。现在的问题是运行查询以生成报告。 如果我对...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

这让我无处可逃。它只是抛出有关参数类型的错误。我尝试使用参数窗口设置类型,但这不起作用。

是否有一种基于查询框中的多个条目生成报告的有效方法?

感谢您的帮助,对不起这个长期的问题感到抱歉。

1 个答案:

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

这将过滤查询。