过滤器 Returns 空白报告访问 2010

Filter Returns Blank Report Access 2010

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

比如用户在A区搜索2015年开工的项目,应该会调出同时满足两个规格的项目。如果他们搜索一个特定的项目编号,它应该只列出那个项目。如果他们留空,所有项目都应该出现。

每当我尝试 运行 报告时,与项目相关的页面都很好,但索引 - 基本上是 table 内容和一些附加信息(开始年份、地区、 ...) - 是空白的。我正在尝试使用 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,非常感谢任何帮助。

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

  1. 当文本框具有非 Null 值时,只有 ProjNo 值与该文本框值匹配的行
  2. 当文本框为 Null 时,不应在 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
    )

从那里,为剩余的每个 field/text 盒对添加额外的 AND (field_name = text_box OR text_box Is Null) 件。

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

或者如果 "blank" 文本框可以为 Null 或 '',请使用:OR Len(Forms![SearchForm]![txtArea] & '') = 0