Использование мастера Создание форм
Это самый простой способ создания составной формы. Его можно использовать в том случае, когда между таблицами, являющимися источниками данных для главной и подчиненной форм, в схеме данных установлена связь «один ко многим».
Использование этого мастера для создания простой формы рассматривалось в п. 5.2. Чтобы создать с его помощью составную форму, нужно проделать следующие действия.
1. Находясь во вкладке Формы, щелкнуть по кнопке Создать. В открывшемся окне Новая форма выбрать пункт Мастер форм и щелкнуть по кнопке ОК.
2. В первом окне мастера в списке Таблицы/запросы последовательно выбрать таблицы/запросы, поля которых будут присутствовать в форме, и переместить используемые поля из списка Доступные поля в список Выбранные поля с помощью кнопок >> и > или двойного щелчка мыши. Отметим, что в создаваемых главной и подчиненной формах эти поля будут размещены в таком же порядке, как и в списке Выбранные поля.
3. В следующем окне Access предлагает указать тип представления данных в создаваемой форме путем выбора из списка в левой части окна имени таблицы/запроса, служащей источником для главной формы. Эта таблица/запрос должна находиться на стороне «один» в связях между отобранными таблицами/запросами, заданными в схеме данных БД.
Проанализировав эти связи, Access разбивает отобранные поля на две группы, относя часть из них к главной, а остальные — к подчиненной форме. Это разбиение он выводит в правой части окна. Для создания обычной составной формы нужно выбрать значение переключателя Подчиненная форма. Если задать значение переключателя Связанная форма, то будет создана главная форма, содержащая отобранные Access поля и кнопку, нажатие которой приведет к открытию подчиненной формы.
Если окно не появляется, то это означает, что Access не может создать с помощью мастера на основе имеющейся информации о связях требуемую составную форму и для ее создания следует использовать другие средства, описываемые ниже.
4. В последующих окнах диалога задается внешний вид и стиль оформления формы. После выбора варианта в окне мастера появляется соответствующий образец.
5. Последнее диалоговое окно дает возможность изменить заданные по умолчанию имена главной и подчиненной форм и указать режим, в котором должна появиться на экране созданная форма.
Рис. 5.13. Выбор типа представления данных
Мастер всегда создает составную форму, если источниками данных главной и подчиненной формы являются две таблицы, между которыми установлена связь типа «один ко многим», причем главная форма содержит данные из таблицы со стороны «один», а подчиненная форма — данные из таблицы со стороны «многие».
Мастер часто позволяет создать составную форму и в том случае, когда подчиненная форма использует информацию из нескольких связанных таблиц. При этом в зависимости от типа их связи может быть создана как обычная составная форма, так и составная форма с двумя уровнями вложенности.
Пример 5.3. Нужно создать составную форму Оценки студентов, причем главная форма должна содержать информацию о студенте (группа, фамилия, имя и отчество), а подчиненная — итоги сдачи сессии (название экзамена, полученная оценка и дата экзамена).
В создаваемой форме в качестве источника данных главной формы можно использовать таблицу Студенты, а подчиненной — таблицы Сессия и Экзамены. Между этими таблицами установлены связи, поэтому для создания формы можно воспользоваться мастером Создание форм.
Рис. 5.14. Форма Оценки студентов в режиме формы
В первом диалоговом окне этого мастера следует выбрать:
• из таблицы Студенты — поля Группа, Фамилия, Имя и Отчество;
• из таблицы Сессия — поля Оценка и Дата экзамена;
• из таблицы Экзамены — поле Экзамен.
Используя информацию о связях таблиц в схеме данных, мастер выводит в левой части следующего окна список базовых таблиц, а в правой части — схему создаваемой формы (см. рис. 5.13). Выберем из левого списка элемент по Студенты, сообщая тем самым мастеру, что источник данных в главной форме — таблица Студенты. Если же выбрать элемент списка по Экзамены, то мастер предложит создать составную форму, главная форма в которой будет содержать единственное поле Экзамен, а остальные поля будут помещены в подчиненную форму.
В следующих диалоговых окнах укажем, что подчиненная форма должна быть табличной формой, и выберем в качестве стиля формы Обычный.
В заключение введем в качестве названия главной формы Оценки студентов, подчиненной формы — подчиненная к форме Оценки студентов и укажем в качестве завершающего действия открытие формы.
Мастер создаст и сохранит обе формы, а затем откроет созданную форму в режиме формы (см. рис. 5.14).
В этом режиме можно изменить внешний вид подчиненной формы: поменять местами поля, изменить их ширину и скрыть лишние поля. Для внесения изменений в главную форму и для изменения размеров подчиненной формы следует перейти в режим конструктора.
Рис. 5.15. Форма Оценки студентов в режиме конструктора
Чтобы осуществить дальнейшую настройку подчиненной формы (формат вывода информации, порядок сортировки, возможность внесения изменений и т.д.), нужно внести в режиме конструктора изменения в свойства ее ЭУ или самой формы. Открыть подчиненную форму в этом режиме можно, находясь в режиме конструктора в составной форме. Для этого достаточно сделать двойной щелчок по ЭУ подчиненная к форме
Оценки студентов, в который мастер помещает подчиненную форму (см. рис. 5.15). После задания новых значений свойств и закрытия подчиненной формы внесенные изменения можно просмотреть, открыв составную форму в режиме формы.
В этом примере Access связывает по полю Код студента главную и подчиненные формы, используя информацию о связях таблиц Студенты и Сессия. Сведения о полях связи между формами содержатся в свойствах подчиненной формы: Подчиненные поля и Основные поля. Для получения этой информации нужно щелчком правой кнопки мыши вызвать свойства ЭУ подчиненная к форме Оценки студентов (см. рис. 5.16).
Появление на экране новой записи в главной форме приводит к автоматическому обновлению содержимого подчиненной формы: она всегда будет содержать записи с оценками текущего студента.
Рис. 5.16. Информация о полях связи
Недостатком созданной формы является то обстоятельство, что она выводит на экран записи о студентах в порядке, определяемом значениями ключевого поля Код студента. Сортировку по другому полю, например Фамилия, проще всего задать в режиме формы или таблицы, щелкнув по этому полю, а затем по соответствующей кнопке сортировки на панели инструментов.
Для задания сортировки по нескольким полям, например Группа и Фамилия, следует указать их через запятую в свойстве главной формы Порядок сортировки. Другим способом является изменение источника данных главной формы. Для этого нужно вызвать окно свойств главной формы, щелкнуть по свойству Источник записей, а затем по появившейся справа кнопке построителя запросов. Откроется окно конструктора запросов, содержащее таблицу Студенты. Следует создать и сохранить запрос, задающий нужный вид сортировки. Его инструкция SQL заменит в свойстве Источник записей имя базовой таблицы Студенты.
Таблица Экзамен играет в этом примере вспомогательную роль, позволяя заменить в подчиненной форме коды экзаменов их названиями, и не мешает работе мастера. Однако при отборе полей для главной формы можно использовать поля только из одного источника данных. Так, попытка построить аналогичную форму, содержащую дополнительно информацию об адресах студентов (таблица Общежитие), не приведет к желаемому результату. Мастер не сможет создать составную форму.
Тем не менее нужный результат можно получить, создав при помощи мастера составную форму без информации об адресах студентов и добавив в нее эту информацию позднее, после завершения работы мастера. Для этого, как и в случае изменения порядка сортировки, следует внести изменения в свойство Источник записей главной формы. В верхнюю часть окна конструктора запросов, содержащего таблицу Студенты, нужно добавить таблицу Общежитие и изменить тип связи этих таблиц. Затем нужно включить в состав отбираемых полей все поля из таблицы Студенты (проще всего с помощью *), а также поля Комната и Общежитие из таблицы Общежитие. После сохранения запроса добавленные поля с информацией об адресах будут включены в список полей, доступных в форме, и могут быть размещены в ней непосредственно либо использованы для создания вычисляемого поля, содержащего адреса студентов.
В ряде случаев мастер автоматически синхронизирует главную и подчиненную формы, источниками которых являются не таблицы, а запросы, при условии, что между базовыми таблицами этих запросов установлена связь нужного типа.
Пример 5.4. Нужно создать составную форму, содержащую информацию об оценках по математике и английскому языку девушек группы УК-21.
Для этого достаточно выполнить следующие действия.
1. Создать и сохранить запрос Девушки группы УК-21, содержащий записи из таблицы Студенты со сведениями о девушках группы УК-21.
2. Создать и сохранить запрос Оценки по математике и английскому языку, основанный на таблице Успеваемость содержащий записи с оценками по нужным предметам.
3. Вызвать мастера Создание форм и отобрать из созданных запросов нужные поля.
4. Указать в качестве источника данных главной формы запрос Девушки группы УК-21.
5. Ответить на остальные вопросы мастера. Используя информацию о связях базовых таблиц Студенты и Успеваемость, он создаст форму, аналогичную приведенной в примере 5.3.
Эту форму можно также получить из составной формы примера 5.3 путем внесения соответствующих изменений в свойства Источник записей ее главной и подчиненной форм.
Иногда использовать мастера для создания составной формы сразу не удается, так как в БД отсутствуют нужные таблицы и/или не установлены связи между ними. В этом случае вызову мастера должно предшествовать создание недостающих таблиц, а также установление их связей с другими таблицами в БД.