Фильтрация вложенного отчета Access 2010 по критериям, не используемым во вложенном отчете

У меня есть подотчет в Access 2010, который в основном действует как указатель / оглавление. Пользователь может использовать форму поиска для фильтрации проектов по определенным критериям. В отчете и индексе должны отображаться только соответствующие отчеты. Отчет фильтрует хорошо, а индекс - нет.

Некоторые критерии представлены непосредственно в индексной форме, взятой из индексной таблицы (площадь, год, проект). Остальные взяты из таблицы действий и не отображаются в указателе.

Это код, который я использую для фильтрации индекса с критериями, отображаемыми на странице индекса, и он отлично работает.

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 и доступ не являются моей сильной стороной, и я буду очень признателен за любые советы или предложения.


person AxxieD    schedule 06.05.2015    source источник


Ответы (1)


Попробуйте использовать запрос UNION, а также перечислите конкретные поля. Количество полей в обоих операторах SELECT должно быть одинаковым, и поля должны иметь один и тот же тип данных. Например, если поле Field1 является длинным, тогда поле Field4 также должно быть длинным (см. Пример ниже).

Нравится:

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    
    )
person Traci Dysart    schedule 07.05.2015
comment
Когда я пытаюсь запустить отчет, появляется пустая страница. - person AxxieD; 07.05.2015
comment
Кроме того, у меня больше полей в таблице Activity, чем в таблице Index. - person AxxieD; 07.05.2015
comment
Хорошо, чтобы использовать запрос UNION, у вас ДОЛЖНО быть такое же количество полей, поэтому для таблицы индекса вы можете вставить несколько заполнителей, например: UNION SELECT Field4, Field5, Field6, '', '', 0, 0 ---- помещайте одинарные кавычки для текстового поля и нули для числового поля (эти типы полей должны соответствовать типам полей в первом операторе SELECT). Как только у вас будет такое же количество полей, вы можете увидеть данные. - person Traci Dysart; 08.05.2015