【问题标题】:Using a lookup field to filter a report or query in Access在 Access 中使用查阅字段筛选报表或查询
【发布时间】:2016-12-06 23:03:37
【问题描述】:

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

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

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

是否有一种有效的方法可以根据查找框中的多个条目生成报告?

感谢您的帮助,抱歉问题太长了。

【问题讨论】:

  • 您好,请不要使用左侧修剪功能。另外,您的 [辅助功能] 是数字还是字符串?

标签: sql-server ms-access vba


【解决方案1】:

好的,你猜对了一半。您可以向查询提供参数,查询使用的每个参数都有一个值。
在您的查询中,您只使用了一个参数,并且为它分配了一个字符串。这不是使用参数的正确方法。您最好构建一个 SQL 选择并根据您创建的字符串对其进行过滤。

Dim qdf As QueryDef
Dim rst As Recordset
Set qdf = CurrentDb.CreateQueryDef("", "SELECT * from tblBuildingFeatures WHERE [Accessibility Features]=" & strWhere & ";")
Set rst = qdf.OpenRecordset

这将过滤查询。

【讨论】:

  • 这似乎成功了!谢谢。为了让它按照我想要的方式工作,我还为查询添加了一个名称,运行脚本,然后为新查询创建一个报告,然后删除新查询并添加行 DoCmd.OpenReport "...", acViewPreviewDoCmd.DeletObject acQuery"..." 再次,非常感谢您的帮助!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2021-06-16
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多