【问题标题】:Filter Returns Blank Report Access 2010过滤器返回空白报告访问 2010
【发布时间】:2015-07-15 16:17:38
【问题描述】:

我在 Access 2010 报告中有一个索引页面,它根据一堆搜索条件提供项目列表。用户可以指定大约 20 个字段。

例如,如果用户搜索区域 A 中 2015 年开始的项目,它应该会找到同时满足这两个规范的项目。如果他们搜索特定的项目编号,它应该只列出那个。如果他们将其留空,则所有项目都应该出现。

每当我尝试运行报告时,与项目相关的页面都很好,但索引——基本上是一个包含一些附加信息(开始年份、地区……)的目录——是空白的。我正在尝试使用 SQL 来显示报告中包含的项目列表。

    SELECT * FROM [INDEX] AS i 
WHERE
        i.area = Forms![SearchForm]![txtArea]
    AND i.year = Forms![SearchForm]![txtStartYear]
    AND i.ProjNo = Forms![SearchForm]![txtProjNo]
;

我正在与几个领域合作,以开始至少获得这么多的工作。我不擅长 SQL,如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 请提供示例数据和预期输出。
  • 我在我的问题中添加了更多细节。我不知道这是否有帮助,但数据本身相当重要。

标签: sql ms-access report ms-access-2010


【解决方案1】:

对于一个文本框,例如Forms![SearchForm]![txtProjNo],你想要...

  1. 当文本框具有非 Null 值时,只有 ProjNo 值与该文本框值匹配的行
  2. 当文本框为 Null 时,不应根据 ProjNo 过滤查询结果 --- 换句话说,无论其 ProjNo 值如何,都可以包含一行

这个需求实际上很容易转化为 SQL:

WHERE
    (
           i.ProjNo = Forms![SearchForm]![txtProjNo]
        OR Forms![SearchForm]![txtProjNo] Is Null
    )

将该 SQL 与上面的简单语言解释进行比较。

假设第一段是清晰的,添加第二个文本框的条件。

WHERE
    (
           i.ProjNo = Forms![SearchForm]![txtProjNo]
        OR Forms![SearchForm]![txtProjNo] Is Null
    )
    AND
    (
           i.area = Forms![SearchForm]![txtArea]
        OR Forms![SearchForm]![txtArea] Is Null
    )

从那里,为剩余的每个字段/文本框对添加额外的 AND (field_name = text_box OR text_box Is Null) 片段。

注意,如果用户不输入搜索值,我假设文本框值为 Null。但是,如果它们实际上是空字符串 ('') 而不是 Null, 用OR Len(Forms![SearchForm]![txtArea]) = 0 代替OR Forms![SearchForm]![txtArea] Is Null

或者,如果“空白”文本框可以是 Null 或 '',请使用:OR Len(Forms![SearchForm]![txtArea] & '') = 0

【讨论】:

  • 这给了我与原始代码相同的问题;仅当只有一个过滤器时才有效。只要我添加AND,它就会给我一个空白报告。
  • 你能分享一份你的数据库吗?
  • 这不是个人数据库,所以我无权分享。我使用Len(Forms...) 进行了更正,如果我仅按代码中的最后一个条件进行搜索,它就可以工作。
  • 再想一想,看起来可能只是“区域”字段搞砸了。我尝试了一个不同的领域,看起来它正在使用这些领域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多