Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access.методика.doc
Скачиваний:
43
Добавлен:
06.01.2021
Размер:
45.39 Mб
Скачать

5.3.12 Использование в условиях отбора подчиненного запроса

Иногда условие отбора использует значение, которое можно получить в результате выполнения другого запроса, называемого подчиненным. В этом случае можно поступить следующим образом:

1. Создать подчиненный запрос.

2. Перейти в режим SQL и скопировать инструкцию SQL, описывающую подчиненный запрос в буфер обмена.

3. Создать основной запрос и перейти в нужную ячейку строки Условие отбора.

4. Ввести требуемый условный оператор (например, > или <), а затем вставить содержимое буфера обмена, заключив его в круглые скобки.

Отметим, что подчиненный запрос должен иметь в качестве результата значение, т.е. одну запись, содержащую одно поле. Подчиненный запрос может использоваться в выражении, определяющем вычисляемое поле.

;Пример 5.12. Пусть нужно найти студентов, которые не старше студента 2311 группы Иванова, причем известно, что у него в группе нет однофамильцев. В этом случае можно создать подчиненный запрос (см. рис. 5.6) к таблице Студенты, результат которого — дата рождения Иванова (27 марта 72 года).

Соответствующая инструкция SQL SELECT выглядит так:

SELECT Студенты.[Дата рождения] FROM Студенты WHERE

(((Студенты.Группа)=«2311») AND ((Студенты.Фамилия) =«иванов»));

Рис. 5.6. Подчиненный запрос, дающий дату рождения

Она содержит следующую информацию:

  • список выбираемых полей (находится после ключевого слова SELECT);

  • таблицу, используемую в запросе (указывается в предложении FROM);

  • условие отбора записей (указывается в предложении WHERE).

Эту инструкцию нужно скопировать в буфер обмена и создать еще один запрос к таблице Студенты, содержащий поля Фамилия, Имя и Дата рождения. В поле Дата рождения следует вставить из буфера обмена сохраненную инструкцию SELECT, заключив ее в круглые скобки и поставив в начале условия знак >=.

Условие отбора в поле Дата рождения будет выглядеть так:

>= (SELECT Студенты.[Дата рождения] FROM Студенты WHERE

(((Студенты. Группа)="2311") AND ((Студенты. Фамилия) ="иванов"));

В результате выполнения этого запроса будет получен требуемый список студентов (рис. 5.8). Отметим, что этот запрос даст правильный результат лишь в том случае, если у Иванова нет однофамильцев. Если это условие не выполнено, то необходимо использовать для отбора даты рождения не фамилию, а код студента.

Рис. 5.7. Основной запрос, использующий инструкцию SQL

Глава 6. Отчеты

6.1. Основные понятия

Отчеты — форма представления информации для использования и распространения. Отчеты — итоговые документы для лиц, которым была предназначена создаваемая БД. Если форма — документ разработчика и лиц, работающих с информацией в БД, то отчеты — инструмент «хозяев» БД, позволяющий им в нужный момент иметь информацию для личного использования или передачи другим лицам. Отчет нужен для подведения итогов деятельности за период подсчетов итоговых сумм и т.д. Структура отчета (рисунок 7.1) напоминает структуру формы за одним существенным исключением — возможностью добавления нескольких пар новых разделов, если возникает потребность группировки данных по каким-либо признакам.

Рис. 6.1. Структура отчета

Возможность группирования данных, - это, пожалуй, главное отличие создания отчета от создания формы. Как реализовать группирование, мы подробно рассмотрим ниже, а пока кратко рассмотрим саму идею группирования и ее влияние на структуру разделов. Предположим, что мы строим отчет по таблице, описывающей реализацию товаров различным клиентам. Можно составить отчет по разным «срезам» такой таблицы. Например, составить отчет, характеризующий заказы каждого клиента. В этом случае основа группирования данных — клиенты. Все заказы разбиваются на группы, относящиеся к одному клиенту.

Другой вариант — рассмотреть, как реализовывались товары различных видов. В этом случае основа группирования — отдельный товар, а все данные о заказах можно разбить на группы, относящиеся к конкретному товару. Группы могут быть вложенными. Например, в первом случае, внутри группирования по клиентам, можно сгруппировать заказы каждого клиента по отдельным товарам. Каждое группирование сопровождается, как правило, появлением двух разделов — заголовка группы и примечания группы. В заголовке обычно указывается информация о поле — источнике группирования (клиенты, товары) и др. В области примечания можно подвести итоги группирования — число заказов каждого клиента, сумму стоимости всех заказов каждого клиента, число заказов каждого товара и т. д.

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

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

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

Надо отметить, что в отчете дублируются и многие другие свойства различных объектов, изучавшихся нами в формах. В отчетах, как и в формах, размещаются элементы управления: поля, надписи и т. д. Как и в формах, они могут быть связанными, свободными и вычисляемыми в зависимости от источника информации, реализуемой в элементе управления.