4 страница. Для синхронизации информации между главной и первой подчиненной формами Access использует поле связи Группа
Для синхронизации информации между главной и первой подчиненной формами Access использует поле связи Группа, а между первой и второй подчиненными формами — поле связи Код студента и процедуру обработки события Текущая запись в первой подчиненной форме, которая запускается при переходе от одной записи к другой.
6.6.2. Использование ЭУ Подчиненная форма/отчет
Хотя вышеописанный способ создания составной формы с помощью мастера Создание форм является самым простым, в ряде случаев он все же не позволяет достичь желаемого результата. Иногда установление связи между базовыми таблицами, необходимое для правильной работы мастера, по тем или иным причинам нежелательно или вообще невозможно. Но даже если все связи установлены, далеко не всегда мастер оказывается на высоте. Типичный пример — ситуация, когда в главной форме нужно поместить поля из нескольких таблиц (см. пример 6.6).
От всех недостатков и ограничений первого способа свободен способ создания составной формы, основанный на внедрении в главную форму подчиненной при помощи ЭУ Подчиненная форма/отчет с последующим связыванием этих форм. В этом случае также удобно использовать специального мастера, действуя по следующей схеме.
1. Определить состав таблиц/запросов и список их полей, нужных для создания как главной, так и подчиненной формы. Этот список должен включать поля, непосредственно размещаемые в форме или входящие в состав выражений вычисляемых полей, а также поля, используемые для связи между формами. Поля связи можно не размещать в формах, но они обязательно должны быть доступными в каждой из них.
2. Создать, если это необходимо, и сохранить запросы, содержащие отобранные на первом шаге поля. В этих запросах можно задать условия отбора нужной информации и порядок ее сортировки.
3. Создать главную форму на базе таблицы или сохраненного запроса и установить для нее режим по умолчанию Простая форма.
4. Включить, если она не включена, кнопку Мастера на панели элементов. Затем нажать кнопку Подчиненная форма/отчет на этой же панели, установить указатель мыши на то место в главной форме, куда нужно поместить подчиненную форму, и нажать левую кнопку. На экране появится первое окно диалога мастера Создание подчиненных форм и отчетов. Так как подчиненная форма создается на базе таблицы или запроса, нужно щелкнуть по кнопке Далее и перейти ко второму шагу.
5. Во втором окне диалога нужно выбрать таблицу (запрос), являющуюся источником данных для подчиненной формы, и перебросить нужные поля из списка Доступные поля в список Выбранные поля. В список выбранных полей должны быть обязательно включены поля, используемые для связи.
6. Затем мастер предлагает установить связь между формами. Можно воспользоваться списком возможных связей или самостоятельно выбрать поля связи между главной и подчиненной формами.
7. В последнем окне диалога задается имя подчиненной формы, которая сохраняется Access как отдельная форма. Для проверки полученного результата нужно перейти в режим формы.
Пример 6.10. Нужно создать составную форму Итоги сессии по группам. Главная форма должна содержать номер группы, а подчиненная— список студентов этой группы и их оценки. Форма также должна включать итоговую информацию: средние баллы в группах по каждому предмету.
1. Начнем с создания источника данных главной формы. Она должна содержать номера групп из поля Группа таблицы Студенты. Однако использовать саму таблицу в качестве источника данных нельзя, так как значения в поле Группа дублируются. Поэтому следует сначала создать форму, не указывая источника ее данных. Затем открыть окно ее свойств, щелкнуть по свойству Источник записей, а потом — по кнопке построителя запросов. Откроется окно конструктора запросов, в котором нужно создать и сохранить запрос к таблице Студенты, отбирающий уникальные номера групп. Для этого проще всего включить в бланк запроса поле Группа и щелкнуть по кнопке (см. п. 5.5.1). После выхода из построителя запросов в свойстве Источник записей появится инструкция SQL:
SELECT Студенты.Группа FROM Студенты GROUP BY Студенты.Группа;
2. Источник данных для подчиненной формы у нас фактически уже создан — это перекрестный запрос Итоги сессии на курсе (см. пример 5.30). Однако для использования в подчиненной форме его нужно немного изменить: вызвать в режиме конструктора список свойств и перечислить в свойстве Заголовки столбцов заголовки столбцов (названия экзаменов). Сохраним новый запрос под тем же именем.
3. Поместим поле Группа в главной форме и с помощью мыши увеличим размеры области данных. Далее щелкнем по кнопке Подчиненная форма/отчет на панели элементов и выделим мышью место в главной форме, которое должна занимать подчиненная форма. Затем ответим на вопросы мастера Создание подчиненных форм и отчетов. Так как форма создается на базе запроса, щелкнем по кнопке Далее, а на следующем шаге выберем запрос Итоги сессии на курсе и отберем все его поля. Затем требуется указать поля связи между формами. Можно выбрать связь из списка, но мы определим ее сами, указав в качестве поля связи поле Группа (см. рис. 6.28). Мастер дал подчиненной форме название подчиненная форма Итоги сессии на курсе и на этом его работа завершена.
Дальнейшую разработку формы будем проводить вручную. Проделаем следующие действия:
Рис. 6.28. Определение полей связи
1. С помощью команд Вид и затем Заголовок/примечание формы добавим в главную форму раздел Заголовок формы. В заголовок добавим надпись и введем в нее текст Итоги сессии по группам, установив размер шрифта — 18 и цвет текста — белый. Затем выделим надпись, скопируем ее в буфер обмена и вставим в заголовок формы. Изменим цвет текста у надписи-копии на темный и расположим ее чуть правее исходной надписи, создав тем самым эффект тени у букв.
2. Удалим созданную мастером надпись к подчиненной форме. Затем выделим поле Группа и его надпись. Установим для них полужирный шрифт 10, выравнивание по центру, размер — по размеру данных и разместим в центре формы.
Рис. 6.29. Созданная мастером подчиненная форма
3. Перейдем в режим формы и скроем в подчиненной форме столбец Группа. Для этого щелкнем по этому столбцу и выполним команды Формат/Скрыть столбцы. Отметим, что для отображения скрытого столбца нужно открыть подчиненную форму в режиме таблицы и выполнить команды Формат/Отобразить столбцы. Затем настроим ширину остальных столбцов, изменив при необходимости размеры подчиненной формы.
4. Чтобы изменить название столбца Код студента на № зач.кн., вызовем в режиме конструктора подчиненную форму. Как видно на рис. 6.29, мастер поместил надписи полей в заголовке формы, а сами поля — в области данных, причем в качестве заголовков в составной форме появляются именно названия полей, а не их надписей. Откроем свойства поля Код студента и заменим его старое имя, появляющееся в качестве заголовка столбца, новым именем. После закрытия формы внесенные изменения будут доступны для просмотра.
Рис. 6.30. Добавление итоговых полей в подчиненную форму
5. Последний этап создания формы — включение в нее итоговой информации. Сначала нужно добавить в раздел Примечание формы подчиненной формы четыре вычисляемых поля, содержащие средние баллы по экзаменам. Для этого следует щелкнуть мышью по ЭУ Поле, а затем — в области примечания. Access вставит в примечание формы свободное поле с надписью. Надпись нужно удалить, далее вызвать свойства поля и ввести в качестве значения свойства Данные: =Avg([Английский]).Затем с помощью операций копирования ивставки создадим три копии этого поля и внесем в их свойство Данные соответствующие изменения в названия итоговых полей (см. рис. 6.30). Пусть Access дал этим полям следующие имена: Поле 14, Поле 15, Поле 16 и Поле 17.Они будут использованы в ссылках на значения итоговыхполей из главной формы.
После создания итоговых полей в подчиненной форме ее следует закрыть и вызвать в режиме конструктора главную форму. В ней создадим вычисляемое поле без надписи и введем в его свойство Данные ссылку на значение итогового поля в подчиненной форме в виде
=[подчиненная форма Итоги сессии на курсе]![Поле 14]
Установим значения его свойств Формат поля – Фиксированный и Число десятичных знаков – 2. Затем создадим три копии этого поля, изменим в свойстве Данные их ссылки на поля подчиненной формы и разместим эти поля под соответствующими столбцами с оценками.
Добавим надпись Средние баллы по предметам. При открытии главной формы в режиме формы в добавленных полях появятся значения средних баллов текущей группы по предметам (см. рис. 6.31).
Рис. 6.31. Составная форма с итоговыми полями
6.6.3. Добавление готовой подчиненной формы
Можно создать составную форму путем «перетаскивания» с помощью мыши в главную форму уже существующей формы в качестве подчиненной. Для этого нужно выполнить следующие действия:
1. Открыть главную форму в режиме конструктора.
2. Вернуться в окно БД, выбрать подчиненную форму и «перетащить» ее в окно главной формы. Access создаст ЭУ Подчиненная форма/отчет.
3. Если это необходимо, следует изменить размеры и положение подчиненной формы.
4. Перейти в режим формы для просмотра полученного результата. Access автоматически устанавливает связь между формами, если выполнено одно из следующих условий:
• Источники данных для обеих форм — связанные таблицы. В качестве полей связи будут использованы поля связи этих таблиц.
• Таблица – источник данных главной формы имеет ключевое поле, а таблица – источник данных подчиненной формы имеет одноименное поле с таким же или совместимым типом данных. В качестве полей связи будут использованы эти поля.
Если формы базируются на запросах, то этим условиям должны удовлетворять базовые таблицы для запросов.
Если Access не смог установить связь между формами, ее следует определить самостоятельно. Для этого нужно, находясь в главной форме, открытой в режиме конструктора, открыть бланк свойств ЭУ подчиненной формы и в свойстве Подчиненные поля задать имя поля (полей) связи подчиненной формы. В свойстве Основные поля задается имя поля (полей) связи главной формы. Тип данных и размер полей связи должны быть совместимыми. Если полей связи несколько, их имена нужно перечислить в одинаковом порядке, разделяя точками с запятой.
6.6.4. Использование для связи других ЭУ
Во всех рассмотренных выше примерах полями связи главной формы служили поля ее базовой таблицы/запроса. Их имена задавались в свойстве Основные поля подчиненной формы, а значения использовались Access для отбора выводимых на экран записей в подчиненной форме. Но в качестве поля связи в свойстве Основные поля можно указать также имя другого ЭУ, размещенного в главной форме. Обычно для этой цели используется поле со списком, реже — список или группа переключателей. Для отбора записей можно использовать несколько ЭУ.
В этом случае главную форму не нужно связывать с каким-либо источником данных, так как отбор записей в подчиненной форме производится на основе совпадения значений ее поля (полей) связи с выбранными значениями ЭУ.
Пример 6.11. Для просмотра заказов покупателей в БД Книги нужно создать составную форму Заказы покупателей, в которой главная форма содержит поле со списком покупателей (фамилия, имя, город), а подчиненная форма — список заказов текущего покупателя ( автор и название книги, дата отправки заказа, количество экземпляров). Список покупателей должен быть отсортирован по фамилиям, а список заказов — по дате заказа.
1. Связь между полем со списком и подчиненной формой должна осуществляться по полю Код покупателя. Чтобы Access рассматривал его значения в качестве значений поля со списком, оно должно быть указано в свойстве списка Присоединенный столбец. Это поле также должно быть доступно в подчиненной форме.
2. Начнем с создания источника данных для поля со списком. На базе таблицы Покупатели создадим и сохраним запрос Список покупателей, содержащий четыре поля: Код покупателя, Фамилия,
Имя и Город с сортировкой по возрастанию по полю Фамилия.
3. Создадим пустую форму, не связывая ее с каким-либо источником данных, и добавим в нее поле со списком. Сообщим мастеру, что поле со списком использует значения из запроса Список покупателей, и отберем все поля этого запроса. Затем укажем, что в качестве значений поля со списком (присоединенного столбца) нужно взять поле Код покупателя и зададим подпись Покупатель.
4. Добавим в форму ЭУ Подчиненная форма/отчет и отберем для подчиненной формы следующие поля:
• Автор и Название из таблицы Книги;
• Код покупателя, Дата отправки и Количество из таблицы Заказы.
Затем щелкнем по кнопке Готово.
5. Access добавит подчиненную форму, но ее связь с полем со списком нужно установить самостоятельно. Для этого двойным щелчком мыши по полю со списком откроем окно его свойств и скопируем в буфер обмена значение свойства Имя: ПолеСоСписком0. Затем щелкнем по подчиненной форме: откроется окно ее свойств. Вставим из буфера обмена в качестве значения его свойства Основные поля — имя ЭУ поле со списком, а в качестве значения свойства Подчиненные поля — Код покупателя.
Рис. 6.32. Поле со списком в составной форме
6. Перейдем в режим формы и проверим правильность установки связи. Мы видим, что после выбора покупателя из списка в подчиненной форме содержатся именно его заказы. Об этом говорит совпадение значений кода выбранного покупателя со значениями в столбце Код покупателя подчиненной формы. Следовательно, связь установлена верно.
7. Вернемся в режим конструктора и добавим в главную форму заголовок. Разместим в нем надпись Заказы покупателей и отформатируем ее. Затем вызовем свойства поля со списком и в свойстве Ширина столбцов укажем в качестве значения ширины первого столбца 0. В результате этой процедуры в закрытом поле будет выводиться не код, а фамилия покупателя. При открытии поля список будет также содержать имя и город проживания покупателя.
8. Перейдя в режим формы, скроем в подчиненной форме столбец Код покупателя и настроим порядок и ширину остальных столбцов. Щелкнем по столбцу Дата отправки, а затем по кнопке Сортировка по убыванию. Сохраним созданную форму.
Пример 6.12. Создадим форму для просмотра распределения числа различных оценок по данному экзамену по группам. Главная форма должна содержать группу из четырех переключателей, каждый из которых соответствует одному из экзаменов. После выбора переключателя в подчиненной форме должна появиться таблица с распределением оценок между группами по выбранному экзамену.
1. Для связи между группой переключателей и подчиненной формой будем использовать значения кодов экзаменов. Разработку формы начнем с размещения группы переключателей в главной форме. Для этого создадим пустую форму и щелкнем по кнопке Группа переключателей на панели элементов, а затем по тому месту в форме, где мы хотим поместить эту группу. Начнет работу мастер
Создание группы переключателей. Сначала он предложит создать подписи к переключателям. Введем в качестве подписей названия экзаменов: Английский, Информатика, История и Философия. На следующем шаге в качестве переключателя, используемого по умолчанию, выберем: Информатика. Затем укажем значения для каждого переключателя. При выборе переключателя его значение будет являться значением всей группы. Поэтому в качестве значений переключателей нужно ввести коды соответствующих экзаменов: 2, 1, 3, 4.Далее мастер предлагает выбрать тип ЭУ и оформление.Примемиспользуемые по умолчанию тип переключатели и оформление вдавленное.В качестве подписи к группе введем текст: Выберите экзамен.На этом работа мастера завершена.
2. На базе таблиц Студенты и Сессия создадим перекрестный запрос Распределение оценок, содержащий в качестве заголовков строк поля Группа и Код экзамена, а в качестве заголовка столбцов — поле
Оценки. Значения итоговой таблицы — число полученных оценок (см. рис. 6.33). В свойстве запроса Заголовки столбцов нужно также перечислить названия столбцов: 5; 4; 3; 2.
Рис. 6.33. Бланк запроса Распределение оценок
3. Добавим в форму ЭУ Подчиненная форма/отчет, укажем, что он основан на созданном выше запросе и отберем все поля из запроса.
4. Для установления связи между группой переключателей и подчиненной формой в свойстве Основные поля укажем имя группы Группа0, а в свойстве Подчиненные поля — имя поля Код экзамена. После настройки созданная форма имеет вид, представленный на рис. 6.34.
Рис. 6.34. Форма Распределение оценок по экзамену
Дата добавления: 2016-04-22; просмотров: 2213;