报告索引未正确过滤访问 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的主要内容,如果未能解决你的问题,请参考以下文章
过滤的唯一索引导致更新失败,因为不正确的 'QUOTED_IDENTIFIER' 设置