1. Откройте
отложенную базу AutoPark.mdb.
В этом задании нужно будет создать пользовательский интерфейс для доступа к
данным этой базы, а именно экранные формы.Работа с данными базы - добавление,
удаление, сортировка и отбор записей по определенному признаку - только с
использованием таблиц и(или) запросов не очень удобна, к тому же это чревато
возможностью разрушения информационной модели данных ошибочными действиями
пользователя. Поэтому для конечных пользователей принято создавать экранные
формы, через которые пользователь может только вносить или редактировать данные,
не имея при этом возможности вносить изменения в тексты запросов, в связи между
таблицами и.т.п.
В базе AutoPark.mdb уже имеются данные и создана информационная
модель данных (схема данных). Здесь также имеются запросы, которые в условиях
текущего задания не нужны - удалите все имеющиеся запросы, кроме запроса «Кардашов»
(на основе этого запроса будут формироваться все выводимые в форме записи).
Переименуйте его в «Записи», а затем в режиме конструктора удалите
все условия отбора, чтобы на экран выводились все записи
2. Определение требований к интерфейсу.
Во-первых, при открытии главной формы (а их будет несколько) должен быть выведен
список список всех путевых листов в виде таблицы - наиболее приемлемый вариант
отображения табличных данных.
Во-вторых, главная форма должна иметь возможность отбора записей по некоторым
критериям, например по датам, по водителям, по маркам и по номерам.
В-третьих, на главной форме должна быть возможность вызова других форм, через
которые можно будет вносить в базу новые данные.
3. Разделение интерфейсов
В силу того, что на главной форме будут выводиться записи, построенные с помощью
запросов, в которых некоторые поля будут вычисляемыми, а некоторые - из разных
таблиц, то добавление и редактирование записей в главной форме будет невозможно.
Поэтому целесообразно для одной и той же базы создавать два вида интерфейса:
один - для просмотра, другой - для редактирования записей.
4. Интерфейс для просмотра записей
- Создайте форму в режиме конструктора
- В окне свойств формы на вкладке Данные в свойстве
Источник записей выберите запрос Записи

- Должно отобразиться маленькое окно со списком доступных полей из этого
запроса:

...если этого не произошло на панели инструментов Access (вверху) нажмите кнопку
Список полей:

- Забросьте на форму все доступные поля, можно одновременно сразу все:

- В окне свойств формы на вкладке
Макет установите свойство Режим по умолчанию в
положение Режим таблицы.
Разделительные линии на форме не нужны (свойство Разделительные линии
значение Нет)
- Просмотрите форму в режиме просмотра. Если вас всё устраивает - закройте
форму, сохранив ее под именем Записи
- Создайте еще одну форму, также в режиме конструктора.
- Сразу же на вкладке Макет установите значения следующих свойств:
- Полосы прокрутки - Отсутствуют
- Область выделения - Нет
- Разделительные линии - Нет
- Тип границы - Окна диалога
- Кнопка оконного меню - Нет
- Кнопка закрытия - Нет
Внимание!
После назначения двух последних свойств закрыть форму можно будет только в
режиме конструктора!
- Закройте форму, задав для нее имя Шаблон
- Сделайте еще пять копий формы Шаблон под именами
Автобусы, Водители, Марки, Топливо,
Путевка и Меню.
5. Интерфейс для редактирования записей
Форма Автобусы
- Откройте форму в режиме конструктора. Одновременно с формой откройте
таблицу Автобусы и посмотрите, какие там доступны поля.
Очевидно, что в качестве марки автобуса должно появляться наименование
марки, а не цифра, поэтому если для формы задать свойство Источник
записей - таблица Автобусы, это не будет правильным.
Нажмите кнопку «...»:
В появившемся окне Добавление таблицы построителя запросов выберите две таблицы
Автобусы и
Марки:
...а в самом окне построителя запросов выберите поля так, как это показано на
рисунке: все поля из таблицы Автобусы (поле «Автобусы.*») и поле
Марка из
таблицы Марки:

- Закройте окно построителя запросов, на запрос о сохранении изменений
инструкции SQL ответьте подтверждением.
- После закрытия окна построителя запросов в свойстве Источник
записей появится строка SQL-запроса. Для применения этой строки в
качестве значения свойства Источник
записей нажмите Enter, после чего снова должно появиться окно со
списком доступных полей (если этого не произошло - смотри ситуацию выше).
- Перетащите все поля на Область данных формы

- Выделите все элементы на форме и задайте размер шрифта для них в 10
пунктов. При этом высоты надписей и полей окажется недостаточно для
нормального отображения текста, поэтому увеличьте их высоту до 0,503см.
Затем выделите ТОЛЬКО НАДПИСИ и задайте для них Выравнивание
текста - По правому краю. Точно также выделите
ТОЛЬКО ПОЛЯ и задайте для них Выравнивание текста -
По центру.

- Далее необходимо заблокировать поля КодАвтобуса и
Марки.Марка (Вкладка Данные, свойства Доступ
- Нет, Блокировка - Да), чтобы
пользователь не смог их изменить. Для них же на вкладке Макет
нужно задать свойства: Тип фона - Прозрачный,
Оформление - обычное, Тип границы -
Отсутствует, Насыщенность - Полужирный,
Выравнивание текста - По левому краю.
- Дальнейшее редактирование свойств элементов управления должно
производиться в индивидуальном режиме. Так текст надписи
«КодАвтобуса» нужно заменить на текст «№»,
надпись Марки.Марка нужно удалить, ширины всех полей, кроме
поля «Автобусы.Марка», задать 2,2см, а расположение элементов
на форме - такое, как на рисунке:

- Закройте форму, сохранив все изменения. Работа с этой формой еще не
закончена.
- Откройте форму Водители. Для нее в окне свойств задайте свойство Источник
записей - таблица Водители (т.к. в этой таблице все
поля заданы своим значением, а не индексом из другой таблицы).

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

Примечание: вверху формы, так же как и на форме Автобусы и на
других формах, нужно оставить примерно 10-15 мм свободного места для размещения
кнопочного меню
- Аналогично следует отредактировать форму Марки. Здесь в
качестве источника строк также нужно будет вызвать построитель запросов, в его
окне построить запрос на основе данных таблиц Марки и
Топливо:

- Отформатируйте элементы управления формы так, как это показано на
рисунке:

- Действуя по той же самой схеме отредактируйте форму Топливо, для
которой источником записей служит таблица Топливо:

- Откройте форму Путевка. Нам нужны поля: Дата, Выручка,
Код_Автобуса, ГосНомер, Марка (наименование, не номер!), Код_Водителя, ФИО,
Маршрут. В свойстве Источник
записей нужно вызвать построитель запросов и в нем построить запрос
на основе таблиц Марки, Водители, Автобусы и Путевки
:

- Набросайте на форму все доступные поля. Поля ГосНомер,
Марка и ФИО нужно заблокировать и выделить
полужирным начертанием текста:

- Откройте форму Меню. В ней нужно убрать кнопки перехода
(на вкладке Макет свойства Кнопки перехода -
Нет):
- На панели инструментов Элементы управления выберите
кнопку Кнопка и бросьте ее на Область данных
формы. Запустится мастер Создание кнопок.
Пройдите по всем этапам работы мастера так, как показано на рисунках:

- По окончанию работы мастера на форме будет создана кнопка с надписью
Автобусы. В нашем случае на форме должны быть размещены еще шесть
кнопок: Водители, Марки, Топливо, Путевка, Маршрут и
Закрыть.
Задайте для них размер шрифта 10 пунктов, начертание - полужирное.

Настройка событий
- Выделите кнопку Автобусы. В окне свойств на вкладке
События напротив события Нажатие кнопки указано
событие [Процедура обработки событий]. Нажмите кнопку «...».
В открывшемся окне редактора Microsoft Visual Basic появится код, что-то типа:

Много кода, в который особо вдаваться не следует. Суть его сводится буквально
к следующему:
DoCmd.OpenForm "Автобусы", acNormal, "", "", , acNormal
а именно: открыть форму Автобусы в режиме формы без каких-то особых параметров.
- Кроме того, что должна быть открыта форма
Автобусы, другая форма должна закрыться. Для закрытия формы есть
команда
DoCmd.Close
Таким образом под кнопкой должно остаться две строки:
DoCmd.Close
DoCmd.OpenForm "Автобусы", acNormal, "", "", , acNormal
Эти строки можно скопировать прямо отсюда и вставить в редакторе
Microsoft Visual Basic между строками
Private Sub ...
и
End Sub
- Для каждой кнопки на форме Меню в окне свойств на той же
вкладке События выберите для события Нажатие кнопки
пункт [Процедура обработки событий]. Нажмите кнопку «...».
В открывшемся окне редактора Microsoft Visual Basic вставить те же строки, в
которых нужно изменить только имя открываемой формы. Для кнопки Закрыть
нужно вставить только DoCmd.Close
- Теперь, когда форма Меню готова, ее нужно внедрить в
каждую из форм, как подчиненную форму:



- Следующий этап - преобразование индексных полей на формах в поля с
выпадающими списками. Откройте форму Автобусы в режиме
конструктора. Выделите поле Автобусы.Марка (если Ваше поле
называется иначе - то поле, в котором выводится код марки автобуса).
Вызовите правым кликом на этом поле его контекстное меню и в нём выберите
пункт Преобразовать элемент в → Поле со списком:

При этом
размер нового элемента станет немного меньше исходного - исправьте это.
- Теперь если просмотреть форму в обычном режиме, то на том месте, где
было поле, появится выпадающий список, но он еще пустой. Для того, чтобы в
нём появились строки необходимо изменить свойство Источник
строк. Источником строк для выпадающего списка должна стать таблица
Марки:

- В таком виде форма уже вполне работоспособна, тем не менее она пока еще
не очень удобна для работы, т.к. определить марку, не зная на память ее
порядковый номер в таблице - значение поля Код_Марки в таблице
Марки - достаточно сложно:

Необходимо модифицировать
выпадающий список так, чтобы в нём помимо списка цифр отображалась
информация о том, какая марка соответствует тому или иному номеру. Для
этого:
- Выставить количество столбцов списка - 2
- Выставить ширины столбцов: 0,6см и 1,5см (эти значения нужно ввести
через точку-с-запятой)
Задать общую ширину списка, исходя из суммы указанных ширин столбцов:
0,6+1,5=2,1:

- Вот теперь форма готова:

- Форма Водители в изменениях не нуждается - она и так
готова. Откройте сразу форму марки. Для этого можно воспользоваться кнопкой
Марки на этой же форме. Т.к. форма автобусы подвергалась
изменениям после нажатия кнопки Марки Access выдаст сообщение
с запросом о подтверждении сохранения формы. Нужно соглашаться.
- Переведите форму Марки в режим конструктора. Операции,
аналогичные последним преобразованиям списка марок на форме Автобусы,
нужно произвести и здесь, над полем Топливо:
- Преобразовать поле в список, откорректировать размеры
- Задать источник строк для списка - таблица Топливо
- Установить число столбцов списка - 2
- Выставить ширину столбцов
списка - 0,5см;1,4см, общую ширину списка 1,9см
- Осталось отредактировать форму Путевки. Здесь
нужно произвести преобразование трех полей: Автобус,
Водитель и Маршрут.
- Список Автобус
- Для формирования источника строк в построителе запросов из трёх
таблиц Марки, Автобусы и Путевки
создайте запрос, выводящий три поля - Автобус,
ГосНомер и Марка:

- Число столбцов - 3
- Ширины столбцов - 0,655см;2см;2,3см
- Число строк списка - 10
- Ширина списка - 5 см
- Список Водитель
- Для формирования источника строк в построителе запросов из
таблицы Водители
создайте запрос, выводящий два поля - Код_Водителя и
ФИО.
- Число столбцов - 2
- Ширина столбцов - 0,6см;3,501см
- Ширина списка - 4,3 см
- Список Маршрут. Здесь нужно изменить только Источник строк - таблица Маршруты
- Для редактирования маршрутов (кнопка Маршрут в меню) можно
либо создать дополнительную форму по типу форм Автобусы,
Водители, Марки и пр., но можно это сделать и
по-другому: например, средствами программирования VBA сформировать запрос на добавление записей в таблицу Запросы, но об этом - позже.
Возвращаемся к Интерфейсу для просмотра записей
- Создайте еще одну форму в режиме конструктора. Сразу на вкладке
Макет нужно убрать Полосы прокрутки, Область
выделения, Разделительные линии, Кнопки перехода,
Кнопку оконного меню и Кнопку закрытия (если у
вас еще сохранилась форма Шаблон, воспользуйтесь ею - это как
раз то, что нужно, только нужно удалить кнопки перехода)
- На эту форму нужно внедрить подчинённую форму Записи:

...и Список (он на панели инструментов идет следом за
Полем со списком). От услуг Мастера Списков нужно
отказаться (кнопка Отмена), лишние надписи к этим внедренным
объектам нужно удалить:

- Чтобы не было разночтений в именах задайте новое имя для этого списка
(вкладка Все самая верхняя строка - Имя). Новое
имя списка - Список_Фам:

- Для этого списка измените свойство Источник строк (вкладка
Данные), чтобы с списке появлялись Фамилия И.О. водителей. Для
этого нужно вызвать построитель запросов, где сформировать запрос на основе
данных из таблицы Водители: в одно-единственное поле запроса следует ввести уже
известное Вам выражение:
ФИО: [Фамилия] & " " & Left([Имя];1) & "." & Left([Отчество];1) & "."
- Теперь, когда список Список_Фам имеет данные, нужно
связать этот список с полем ФИО водителя подчиненной формы
записи. Для этого выделите внедренный объект Подчиненная форма/отчет:
Записи, на вкладке Данные в свойство Основные
поля ввести Список_Фам, а в свойство Подчиненные
поля ввести ФИО водителя.
- Теперь список Список_Фам управляет отображением записей.
Тем не менее, задание еще не закончено. Помимо фильтрации записей по
водителю нужно еще иметь возможность осуществлять фильтрацию по автобусам,
по маркам автобусов, по маршрутам и по дате. Удобнее всего это организовать
с помощью вкладок.
- Бросьте на форму уже знакомый вам элемент Вкладка.
Разместите его где-нибудь внизу формы. Напрямую перетащить мышью внедренные
объекты с формы на вкладку нельзя, но можно их вырезать на форме и вставить
на вкладке.
Внимание!
Нужно именно
вырезать, а не «копировать - вставить - удалить
исходный экземпляр», т.к. в этом случае будет создан не список с именем
Список_Фам, а список с совершенно иным именем, и связь между
подчиненной формой и списком придется устанавливать заново.
- «Приберитесь» немного на форме, так, чтобы она выглядела примерно так:

- Создайте еще четыре вкладки методом копирования имеющейся вкладки
Водители. Подпишите их Маршруты, Автобусы, Марки и Даты
- Вкладка Маршруты:
- Список должен выводить список маршрутов (Данные -
Источник строк - запрос на основе таблицы
Маршруты)
- Подчиненная форма/отчет: Основные поля - список,
Подчиненные поля - Маршрут
- Вкладка Автобусы:
- Список должен выводить список госномеров автобусов (Данные -
Источник строк - запрос на основе таблицы Автобусы)
- Подчиненная форма/отчет: Основные поля - список,
Подчиненные поля - ГосНомер
- Вкладка Марки:
- Список должен выводить список марок автобусов (Данные
- Источник строк - запрос на основе таблицы
Марки)
- Подчиненная форма/отчет: Основные поля - список,
Подчиненные поля - Марка
- Вкладка Даты:
- Список должен выводить список дат путёвок (Данные
- Источник строк - запрос на основе таблицы Путёвки)
- Подчиненная форма/отчет: Основные поля - список,
Подчиненные поля - Дата
- В итоге должна получиться вот такая форма:

- Осталось связать два интерфейса воедино. Для этого:
- Область данных формы нужно немного увеличить, так, чтобы внизу
появилось примерно 12-15 мм свободного места для размещения там двух
кнопок - кнопки «Закрыть» и кнопки «Путёвки...»
- Задайте событие «Нажатие кнопки» для кнопки «Закрыть».
(События → Нажатие кнопки = «[Процедура обработки событий]» →
«...» → {Редактор VBA})
- Впишите команду закрытия формы (DoCmd.Close)
- Для кнопки «Путёвки» впишите команду открытия
формы «Путёвки».
- Сохраните форму.
- В завершение работы нужно отрегулировать отложенную кнопку «Маршруты»
на форме «Меню». Для этого в редакторе VBA наберите три
строчки кода:

Здесь первые две строки - объявление новых переменных Marsh и Dlit (номер и длительность
маршрута), а третья строка - формирование запроса на добавление записей на
основе переменных Marsh и Dlit и отправка его на базу.
- И последний штрих - настройка запуска файла базы данных:

Установите параметры запуска так, как это показано на рисунке:

Внимание!
Если снять эту галочку дальнейшее изменение базы станет невозможным!
- Теперь закройте базу данных и откройте ее заново. Картинка должна получиться
что-то вроде этого:
