Упражнение 2. Проектирование многотабличных форм
Многотабличная форма создается для работы с данными нескольких взаимосвязанных таблиц. Многотабличная форма может состоять из основной части и одной или нескольких подчиненных включаемых форм, то есть быть составной.
Проектирование многотабличных форм выполняется на основе схемы данных, состоящей из нормализованных таблиц, связанных одно/многозначными отношениями.
В процессе проектирования формы целесообразно выполнить приведенную ниже последовательность действий:
― Определить таблицы, которые будут источником записей основной части формы.
― Выбрать таблицы, которые будут источниками записей подчиненных форм, включаемых в составную форму.
― Определить состав полей каждой из форм.
― Выбрать способы реализации подчиненных форм и источников записей.
Многотабличная форма может быть создана в режиме КОНСТРУКТОРА или с помощью МАСТЕРА форм. Наиболее технологичным является использование КОНСТРУКТОРА.
1. На основе схемы данных определим данные для конструирования формы (рис.7).
Рис.7. Подсхема данных для конструирования формы на базе таблицы ЗАКАЗ
Источник записей для основной части формы ЗАКАЗ – поля таблицы ЗАКАЗ. Поля таблицы ПУНКТ_ЗАКАЗА являются источниками записей подчиненной формы. Для поля основной части ПОКУПАТЕЛЬ источником записей будет таблица ПОКУПАТЕЛЬ. Для поля ФОРМА_ОПЛАТЫ источником записей – поля таблицы ФОРМА_ОПЛАТЫ.
Реализацию списков записей для полей ПОКУПАТЕЛЬ и ФОРМА_ОПЛАТЫ в основной части формы удобно выполнить с помощью элементов управления ПОЛЕ СО СПИСКОМ.
Реализацию полей подчиненной формы удобно выполнить с помощью вложенной формы. Следовательно, необходимо предварительно разработать подчиненную форму ПУНКТ_ЗАКАЗА.
2. В режиме КОНСТРУКТОРА создайте форму для таблицы ПУНКТ_ЗАКАЗА (рис.8).
3. Для поля ТОВАР источником записей является таблица ТОВАР. Реализацию удобно выполнить с помощью элемента ПОЛЕ СО СПИСКОМ (рис.8).
Рис.8. Форма ПУНКТ_ЗАКАЗА в режиме КОНСТРУКТОРА
4. Вносить записи с помощью созданной формы неудобно, так как нужно помнить номер заказа. Эта форма должна быть вложенной формой для формы Заказ. Форму ПунктЗаказа можно просмотреть в режиме ВИД (рис.9).
Рис.9. Окончательный вид подчиненной формы ПУНКТ_ЗАКАЗА
Прежде, чем начать создавать основную часть формы ЗАКАЗ, внесем некоторые изменения в нашу базу данных. Иногда используемые элементы интерфейса и способы реализации полей таблиц в форме Access позволяют сократить количество таблиц в схеме базы данных.
В таблице ЗАКАЗ поле ФОРМА_ОПЛАТЫ имеет всего два значения: наличная оплата и безналичная оплата. В КОНСТРУКТОРЕ форм на панели инструментов есть элемент ПЕРЕКЛЮЧАТЕЛЬ, имеющий два состояния: 1/0, ДА/НЕТ, ВКЛ/ВЫКЛ. Использование элемента ПЕРЕКЛЮЧАТЕЛЬ для реализации поля ФОРМА_ОПЛАТЫ позволит:
― Хранить значения поля ФОРМА_ОПЛАТЫ в числовом формате, а не в текстовом формате (например, 1 – наличная, 0 – безналичная), что является экономией памяти.
― Удалить из схемы таблицу ФОРМА_ОПЛАТЫ (комментарии к значениям поля можно вынести непосредственно в форму).
― Реализовать понятный и привлекательный интерфейс формы.
5. Удалите из базы данных таблицу ФОРМА_ОПЛАТЫ.
6. В режиме КОНСТРУКТОРА создайте форму для таблицы ЗАКАЗ (рис.13).
7. Перенесите поля НОМЕР_ЗАКАЗА, ДАТА_ЗАКАЗА, ОПЛАЧЕНО в область данных формы из списка полей.
8. С помощью свойств поля НОМЕР_ЗАКАЗА это поле можно сделать недоступным для ввода (поле типа счетчик), как показано на рис.15.
9. Сконструируйте поле ПОКУПАТЕЛЬ с помощью элемента ПОЛЕ СО СПИСКОМ (источник записей – таблица ПОКУПАТЕЛЬ).
10. Для создания поля ФОРМА_ОПЛАТЫ щелкните мышью по элементу ГРУППА ПЕРЕКЛЮЧАТЕЛЕЙ на панели инструментов КОНСТРУКТОРА и затем покажите в форме место для помещения этого элемента.
11. Откроется первое диалоговое окно МАСТЕРА создания переключателей. Введите подписи для переключателей (рис.10).
Рис.10. Мастер создания элементов ПЕРЕКЛЮЧАТЕЛИ
12. В следующем диалоге можно выбрать один из переключателей в качестве переключателя, выбранного по умолчанию.
13. В следующем окне диалога вам будет предложено установить числовые значения, которые будут сохранять в поле ФОРМА_ОПЛАТЫ в таблице ЗАКАЗ. Предположим, что наличная форма оплаты – это число 1, безналичная – число 0 (рис.11).
14. Далее надо указать в каком поле будут сохранены значения 1 или 0 (рис.12).
Рис.11. Создание переключателей в форме
Рис.12. Сохранение значений переключателей
15. Следующий шаг определит дизайн вашей группы переключателей.
16. Последний шаг диалога. Введите название вашей группы переключателей, например – форма оплаты.
Рис.13. Форма ЗАКАЗ в режиме КОНСТРУКТОРА
Добавление подчиненной формы в основную форму может быть с помощью кнопки ПОДЧИНЕННАЯ ФОРМА/ОТЧЕТ на панели элементов режима КОНСТРУКТОР (рис.14).
Рис.14. Размещение подчиненной формы в основной форме
Рис.15. Окончательный вид многотабличной формы ЗАКАЗ
17. Проверьте работоспособность многотабличной формы (рис.15). Введите несколько заказов, каждый из которых состоит из нескольких позиций[2].
18. Проверьте, что введенные в форму данные помещаются в таблицы ЗАКАЗ и ПУНКТ_ЗАКАЗА.
Самостоятельно
1. Добавьте в форму ЗАКАЗ кнопки для выполнения следующих операций:
― Удаления текущей записи.
― Открытия формы ПОКУПАТЕЛЬ.
― Обновления состояния записей формы.
2. В свойствах поля ЦЕНА_РЕАЛИЗАЦИИ в подчиненной форме установите формат ДЕНЕЖНЫЙ (рис.15).
3. Проверьте возможность добавления нового покупателя непосредственно из формы ЗАКАЗ. Убедитесь, что эти записи попадают в таблицу ПОКУПАТЕЛЬ.
4. Добавьте в форму ТОВАР подчиненную формы, созданную на основе таблицы ПАРТИЯ_ТОВАРА.
5. В форме ПАРТИЯ _ТОВАРА создайте вычисляемое поле ЦЕНА_ПРОДАЖИ (рис. 16) с помощью ПОСТРОИТЕЛЯ ВЫРАЖЕНИЙ (кнопка на панели инструментов КОНСТРУКТОРА формы) и элемента управления ПОЛЕ из панели элементов .
Рис.16. Создание вычисляемого поля в форме
На рис.17 показан примерный вид формы для таблицы ТОВАР в режиме КОНСТРУКТОРА формы.
Рис.17. Вид формы ТОВАР в режиме КОНСТРУКТОРА
6. Заполните все таблицы вашей базы данных с помощью созданных форм.
7. Добавьте при необходимости кнопки для удаления записей, кнопки для открытия форм-справочников из многотабличных форм.