报告索引未正确过滤访问 2010

Posted

技术标签:

【中文标题】报告索引未正确过滤访问 2010【英文标题】:Report Index Not Filtering Properly Access 2010 【发布时间】:2015-05-05 17:07:37 【问题描述】:

我在 Access 2010 中有一个子报表,它根据搜索表单中的条件在索引中列出项目。在此表单中,用户可以选择多种参数进行搜索(例如项目编号、区域、项目年份等)。

我设置了一个 SQL 来过滤符合搜索条件的项目。目前,它仅适用于项目编号;如果我直接过滤它,它会带来一个项目,否则它会带来每个项目,而不管其他搜索参数如何。

索引必须能够按 ProjNo 过滤所有其他标准(项目年份、区域、部门、设计师等)

SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE 
IIF(Forms![SearchForm]![ProjNo]="","*",Forms![SearchForm]![ProjNo])

我不太擅长 SQL,所以任何建议都会很棒。

【问题讨论】:

符合所有条件的行。因此,如果他们按区域和项目年份进行搜索,它应该会带来与两者匹配的所有内容。 【参考方案1】:

你想要...

符合所有条件的行。因此,如果他们按区域搜索 和项目年份,它应该带来与两者相匹配的所有东西。

使用一个WHERE 子句条件来指定您要在area 上进行匹配,并在project year 上使用另一个条件。将这两个条件与AND结合起来。

假设您的 SearchForm 包含一个名为 txtArea 的文本框用于 area 值,另一个名为 txtProjectYear 的文本框用于 项目年份价值...

SELECT * FROM [INDEX] AS i 
WHERE
        i.area = Forms![SearchForm]![txtArea]
    AND i.[project year] = Forms![SearchForm]![txtProjectYear]

注意INDEX 是reserved word。我将它括在 SQL 语句中,这应该可以减少出现问题的可能性。但是,如果是我,我会给桌子起一个不同的名字。

【讨论】:

如何对所有过滤器执行此操作?不止这两个。 AND 第三个搜索条件的第三个条件。根据需要对每个剩余的标准重复。 当我这样做时,会出现一个弹出窗口并询问我 i.project 年份,即使它已填写在搜索表单中,并显示一个空白报告。 您的表格是否包含名为project year的字段?如果是这样,您必须将该名称括起来,因为它包含一个空格:i.[project year] 注意我忘记在我的原始答案中包含点。现已修复。【参考方案2】:

试试这个:

SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE 
IIF(Len(Forms![SearchForm]![ProjNo])>0,Forms![SearchForm]![ProjNo],"*")

当然,您可以在 vba 中评估表单的内容并确定是否应该应用过滤器,例如(未经测试)

Dim strProject As String, strQuery as string
If Me.ProjNo.Selected > 0 Then
    strProject = Me.ProjNo
Else
    strProject = "*"
End If
strQuery = "SELECT * FROM INDEX WHERE INDEX.ProjNo LIKE " & Chr(34) & strProject & Chr(34)

然后您可以使用它来构建您的过滤表达式。

【讨论】:

这不起作用。即使我搜索特定项目,它也会返回所有项目。 好的。您是否尝试过第二个建议 - 在应用过滤器之前在 vba 中进行评估? 我已经尝试在 VBA 中这样做,但没有成功,这就是我尝试使用 SQL 的原因。

以上是关于报告索引未正确过滤访问 2010的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA 过滤器 RecordCount 未正确更新值

如何使用 GoAccess 正确过滤我的访问日志?

过滤的唯一索引导致更新失败,因为不正确的 'QUOTED_IDENTIFIER' 设置

FIREBASE 警告:使用未指定的索引。您的数据将在客户端下载和过滤

使用数据表表单过滤器过滤报告

在vba中使用多个字符串过滤访问报告,获取数据类型不匹配