2015-05-06 2 views
2

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

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

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

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

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

Как это:

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  
    ) 
+0

Когда я пытаюсь запустить отчет, он дает мне пустую страницу. – AxxieD

+0

Кроме того, у меня больше полей в таблице «Активность», чем в таблице «Index». – AxxieD

+0

ОК, чтобы использовать запрос UNION, вы ДОЛЖНЫ иметь то же самое количество полей, поэтому для таблицы индексов вы можете помещать некоторые заполнители, например: UNION SELECT Field4, Field5, Field6, '', '', 0 , 0 ---- положить одинарные кавычки для текстового поля и нулей для числового поля (эти типы полей должны совпадать с типами полей в первом операторе SELECT). Если у вас одинаковое количество полей, вы можете увидеть данные. –