Использование ЭУ Подчиненная форма/отчет
Хотя вышеописанный способ создания составной формы с помощью мастера Создание форм является самым простым, в ряде случаев он все же не позволяет достичь желаемого результата. Иногда установление связи между базовыми таблицами, необходимое для правильной работы мастера, по тем или иным причинам нежелательно или вообще невозможно. Но даже если все связи установлены, далеко не всегда мастер оказывается на высоте. Типичный пример — ситуация, когда в главной форме нужно поместить поля из нескольких таблиц (см. пример 5.3).
От всех недостатков и ограничений первого способа свободен способ создания составной формы, основанный на внедрении в главную форму подчиненной при помощи ЭУ Подчиненная форма/отчет с последующим связыванием этих форм. В этом случае также удобно использовать специального мастера, действуя по следующей схеме.
1. Определить состав таблиц/запросов и список их полей, нужных для создания как главной, так и подчиненной формы. Этот список должен включать поля, непосредственно размещаемые в форме или входящие в состав выражений вычисляемых полей, а также поля, используемые для связи между формами. Поля связи можно не размещать в формах, но они обязательно должны быть доступными в каждой из них.
2. Создать, если это необходимо, и сохранить запросы, содержащие отобранные на первом шаге поля. В этих запросах можно задать условия отбора нужной информации и порядок ее сортировки.
3. Создать главную форму на базе таблицы или сохраненного запроса и установить для нее режим по умолчанию Простая форма.
4. Включить, если она не включена, кнопку Мастера на панели элементов. Затем нажать кнопку Подчиненная форма/отчет на этой же панели, установить указатель мыши на то место в главной форме, куда нужно поместить подчиненную форму, и нажать левую кнопку. На экране появится первое окно диалога мастера Создание подчиненных форм и отчетов. Так как подчиненная форма создается на базе таблицы или запроса, нужно щелкнуть по кнопке Далее и перейти ко второму шагу.
5. Во втором окне диалога нужно выбрать таблицу (запрос), являющуюся источником данных для подчиненной формы, и перебросить нужные поля из списка Доступные поля в список Выбранные поля. В список выбранных полей должны быть обязательно включены поля, используемые для связи.
6. Затем мастер предлагает установить связь между формами. Можно воспользоваться списком возможных связей или самостоятельно выбрать поля связи между главной и подчиненной формами.
7. В последнем окне диалога задается имя подчиненной формы, которая сохраняется Access как отдельная форма. Для проверки полученного результата нужно перейти в режим формы.
Пример 5.5. Нужно создать составную форму Средний балл по группам. Главная форма должна содержать номер группы, а подчиненная — список студентов этой группы и их оценки.
1. Начнем с создания источника данных главной формы. Она должна содержать номера групп из поля Группа таблицы Студенты. Однако использовать саму таблицу в качестве источника данных нельзя, так как значения в поле Группа дублируются. Поэтому следует сначала создать форму, не указывая источника ее данных. Затем открыть окно ее свойств, щелкнуть по свойству Источник записей, а потом — по кнопке построителя запросов. Откроется окно конструктора запросов, в котором нужно создать и сохранить запрос к таблице Студенты, отбирающий уникальные номера групп. Для этого проще всего включить в бланк запроса поле Группа и щелкнуть по кнопке. После выхода из построителя запросов в свойстве Источник записей появится инструкция SQL: SELECT Студенты.Код_Группа FROM Студенты GROUP BY Студенты.Группа;
2. Источник данных для подчиненной формы у нас фактически уже создан — это перекрестный запрос Средний балл на курсе. Однако для использования в подчиненной форме его нужно немного изменить: вызвать в режиме конструктора список свойств и перечислить в свойстве Заголовки столбцов заголовки столбцов (названия предметов). Сохраним новый запрос под тем же именем.
3. Поместим поле Группа в главной форме и с помощью мыши увеличим размеры области данных. Далее щелкнем по кнопке Подчиненная форма/отчет на панели элементов и выделим мышью место в главной форме, которое должна занимать подчиненная форма. Затем ответим на вопросы мастера Создание подчиненных форм и отчетов. Так как форма создается на базе запроса, щелкнем по кнопке Далее, а на следующем шаге выберем запрос Итоги сессии на курсе и отберем все его поля. Затем требуется указать поля связи между формами. Можно выбрать связь из списка, но мы определим ее сами, указав в качестве поля связи поле Группа (см. рис. 5.17). Мастер дал подчиненной форме название подчиненная форма Итоги сессии на курсе и на этом его работа завершена.
Дальнейшую разработку формы будем проводить вручную. Проделаем следующие действия:
Рис.5.17. Определение полей связи
1. С помощью команд Вид и затем Заголовок/примечание формы добавим в главную форму раздел Заголовок формы. В заголовок добавим надпись и введем в нее текст Итоги сессии по группам, установив размер шрифта — 18 и цвет текста — белый. Затем выделим надпись, скопируем ее в буфер обмена и вставим в заголовок формы. Изменим цвет текста у надписи-копии на темный и расположим ее чуть правее исходной надписи, создав тем самым эффект тени у букв.
2. Удалим созданную мастером надпись к подчиненной форме. Затем выделим поле Группа и его надпись. Установим для них полужирный шрифт 10, выравнивание по центру, размер — по размеру данных и разместим в центре формы.
Рис. 5.18. Созданная мастером подчиненная форма
3. Перейдем в режим формы и скроем в подчиненной форме столбец Группа. Для этого щелкнем по этому столбцу и выполним команды Формат/Скрыть столбцы. Отметим, что для отображения скрытого столбца нужно открыть подчиненную форму в режиме таблицы и выполнить команды Формат/Отобразить столбцы. Затем настроим ширину остальных столбцов, изменив при необходимости размеры подчиненной формы.
4. Чтобы изменить название столбца Код студента на № зач.кн., вызовем в режиме конструктора подчиненную форму. Как видно на рис. 5.18, мастер поместил надписи полей в заголовке формы, а сами поля — в области данных, причем в качестве заголовков в составной форме появляются именно названия полей, а не их надписей. Откроем свойства поля Код студента и заменим его старое имя, появляющееся в качестве заголовка столбца, новым именем. После закрытия формы внесенные изменения будут доступны для просмотра.
Рис. 5.19. Добавление итоговых полей в подчиненную форму
5. Последний этап создания формы — включение в нее итоговой информации. Сначала нужно добавить в раздел Примечание формы подчиненной формы четыре вычисляемых поля, содержащие средние баллы по экзаменам. Для этого следует щелкнуть мышью по ЭУ Поле, а затем — в области примечания. Access вставит в примечание формы свободное поле с надписью. Надпись нужно удалить, далее вызвать свойства поля и ввести в качестве значения свойства Данные: =Avg([Английский]). Затем с помощью операций копирования и вставки создадим три копии этого поля и внесем в их свойство Данные соответствующие изменения в названия итоговых полей (см. рис. 5.19).
Пусть Access дал этим полям следующие имена: Поле 14, Поле 15, Поле 16 и Поле 17. Они будут использованы в ссылках на значения итоговых полей из главной формы.
После создания итоговых полей в подчиненной форме ее следует закрыть и вызвать в режиме конструктора главную форму. В ней создадим вычисляемое поле без надписи и введем в его свойство Данные ссылку на значение итогового поля в подчиненной форме в виде
=[подчиненная форма Итоги сессии на курсе]![Поле 14]
Установим значения его свойств Формат поля – Фиксированный и Число десятичных знаков – 2. Затем создадим три копии этого поля, изменим в свойстве Данные их ссылки на поля подчиненной формы и разместим эти поля под соответствующими столбцами с оценками.
Добавим надпись Средние баллы по предметам. При открытии главной формы в режиме формы в добавленных полях появятся значения средних баллов текущей группы по предметам (см. рис. 5.20).
Рис. 5.20. Составная форма с итоговыми полями