按子条目中未使用的条件筛选Access 2010子报表

时间:2015-05-06 14:54:31

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

我在Access 2010中有一个子报表,它基本上充当索引/目录。用户可以使用搜索表单按特定条件过滤项目。只有匹配的报告才会出现在报告和索引中。报告过滤得很好,但索引没有。

某些标准直接采用索引形式,取自索引表(area,year,projno)。其余部分来自活动表,不会出现在索引中。

这是我用来根据索引页面中出现的条件过滤索引的代码,它运行正常。

SELECT *
FROM [INDEX] AS i
WHERE (
           i.ProjNo = Forms![SearchForm]![txtProjNo]
        OR Len(Forms![SearchForm]![txtProjNo]) = 0    
    )
   AND
    (
           i.Prod = Forms![SearchForm]![txtProd]
        OR Len(Forms![SearchForm]![txtProd]) = 0
    )
   AND
    (
           i.year = Forms![SearchForm]![txtStartYear]
        OR Len(Forms![SearchForm]![txtStartYear]) = 0
    )

当我尝试从活动表中添加不在索引中的字段时,会出现问题。

此代码

SELECT *
FROM [INDEX] AS i
WHERE (
           i.ProjNo = Forms![SearchForm]![txtProjNo]
        OR Len(Forms![SearchForm]![txtProjNo]) = 0    
    )
   AND
    (
           i.Prod = Forms![SearchForm]![txtProd]
        OR Len(Forms![SearchForm]![txtProd]) = 0
    )
   AND
    (
           i.year = Forms![SearchForm]![txtStartYear]
        OR Len(Forms![SearchForm]![txtStartYear]) = 0
    )

  AND (SELECT *
FROM [ACTIVITY] AS a
WHERE (
           a.manager = Forms![SearchForm]![txtManager]
        OR Len(Forms![SearchForm]![txtManager]) = 0    
    ));

给我一​​个空白索引,甚至没有标题或页码。

SQL和Access不是我的强项,我真的很感激任何建议或建议。

1 个答案:

答案 0 :(得分:1)

尝试使用UNION查询并列出特定字段。两个SELECT语句中的字段数必须相同,并且字段必须是相同的数据类型。例如,如果Field1是Long,那么Field4也应该是long(参见下面的示例)。

像这样:

SELECT Field1, Field2, Field3
FROM [INDEX] AS i
WHERE (
           i.ProjNo = Forms![SearchForm]![txtProjNo]
        OR Len(Forms![SearchForm]![txtProjNo]) = 0    
    )
   AND
    (
           i.Prod = Forms![SearchForm]![txtProd]
        OR Len(Forms![SearchForm]![txtProd]) = 0
    )
   AND
    (
           i.year = Forms![SearchForm]![txtStartYear]
        OR Len(Forms![SearchForm]![txtStartYear]) = 0
    )

UNION

SELECT Field4, Field5, Field6
FROM [ACTIVITY] AS a
WHERE (
           a.manager = Forms![SearchForm]![txtManager]
        OR Len(Forms![SearchForm]![txtManager]) = 0    
    )