过滤器返回空白报表访问2010

时间:2015-05-05 19:10:09

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

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

例如,如果用户在2015年开始的区域A中搜索项目,则应该调出符合这两个规范的项目。如果他们搜索特定项目编号,则应仅列出该编号。如果他们留空,所有项目都应该出现。

每当我尝试运行报告时,与项目相关的页面都很好,但索引 - 基本上是一个包含一些附加信息(起始年份,区域......)的目录 - 是空白的。我试图使用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并不擅长,我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

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

  1. 当文本框具有非空值时,只有 ProjNo 值与该文本框值匹配的行
  2. 当文本框为空时,不应在 ProjNo 上过滤查询结果---换句话说,无论其 ProjNo 值是什么,都可以包含一行< / LI>

    这个要求实际上很容易转换成SQL:

    driver.set_page_load_timeout(10)
    

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

    假设第一个部分是清除的,请添加第二个文本框的条件。

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

    从那里,为每个剩余的字段/文本框对添加额外的WHERE ( i.ProjNo = Forms![SearchForm]![txtProjNo] OR Forms![SearchForm]![txtProjNo] Is Null ) AND ( i.area = Forms![SearchForm]![txtArea] OR Forms![SearchForm]![txtArea] Is Null ) 件。

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

    或者,如果“空白”文本框可以为空或OR Forms![SearchForm]![txtArea] Is Null,请使用此代码:''