Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование учебной БД.doc
Скачиваний:
26
Добавлен:
15.03.2015
Размер:
2.57 Mб
Скачать

Создание связанной формы «Оплата»

Еще одной формой, которая необходима для формы «Заказы» является форма «Оплата», которая в режиме конструктора имеет вид:

Форма создается для таблицы «Оплата» и имеет следующие особенности:

  • Создать форму с помощью мастера для всех полей таблицы с внешним видом - ленточный;

  • Скрыть поле «Номер заказа» и удалить его надпись;

  • Автоматически сформировать «Номер заказа» перенеся его из формы «Заказы». Для этого в событии «До обновления» формы «Оплата» необходимо с помощью редактора создать процедуру обработки события следующего вида:

If Nz([Номер заказа]) = 0 Then

[Номер заказа] = Forms![Заказы]![Номер заказа]

End If

Эта процедура для каждой новой записи значению поля «Номер заказа» присваивает значение одноименного поля из формы «Заказы».

Закройте созданную форму с сохранением изменений.

Продолжение создания формы «Заказы»

После создания формы «Оплата» можно продолжить разработку формы «Заказы». В дополнение к уже созданным элементам формы необходимо:

  • Вставить подчиненную форму «Спецификация»;

  • Добавить кнопку «Новый», которая позволит создать запись для нового заказа, присвоив ему очередной номер и задав дату заказа равную текущей дате.

  • Добавить кнопку, вызывающую форму «Оплата» с отображением записей только для данного заказа;

  • Создать поле с итоговыми суммами по заказу.

Указанные действия выполняются следующим образом.

Вставка подчиненной формы:

На панели элементов выбрать соответствующую кнопку, т.е. на кнопке «Подчиненные формы» щелкнуть левой клавишей мыши, а затем при нажатой левой клавише выделить место под подчиненную форму в форме «Заказы». После этого запускается мастер построения подчиненных форм. Первым окном, которое появится на экране, будет:

Следующее окно позволяет установить связь между основной и подчиненной формами. Для этого нужно установить положение переключателей, как показано на рисунке.

Последнее окно запрашивает имя подчиненной формы. Здесь нужно просто нажать кнопку «Готово».

Создание кнопки «Новый»

При вставке в форму «Заказы» кнопки «Новый» необходимо вставить кнопку, как было описано выше, и выбрав категорию «Обработка записей» и действие «Добавить запись». В окне выбора формы кнопки необходимо включить переключатель «Текст» и ввести слово – Новый. Созданная кнопка позволяет добавлять новые записи в таблицу «Заказ». При создании кнопки СУБД автоматически добавляет в событие «Нажатие кнопки» процедуры обработки события следующего вида:

Private Sub Кнопка13_Click()

On Error GoTo Err_Кнопка13_Click

DoCmd.GoToRecord , , acNewRec

Exit_Кнопка13_Click:

Exit Sub

Err_Кнопка13_Click:

MsgBox Err.Description

Resume Exit_Кнопка13_Click

End Sub

Операторы On Error ,MsgBox Err.Description ,Resume являются операторами БЕЙСИКа и служат для организации обработки ошибок. Это стандартный набор операторов, создаваемый мастером построения кнопок. Оператор DoCmd.GoToRecord , , acNewRec осуществляет создание новой записи и переход к ней.

Однако в задачу кнопки входит также создание нового номера записи и занесение текущей даты в дату заказа. Поэтому в процедуру после оператора DoCmd.GoToRecord , , acNewRec необходимо добавить следующие операторы:

If Nz([Номер заказа]) = 0 Then

[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1

[Дата заказа] = Date()

End If

DoCmd.GoToControl " ПолеСоСписком8"

Этим фрагментом программы в поле «Номер заказа», если он равен нулю или пуст, заносится максимальный код товара увеличенный на единицу; в поле «Дата заказа» заносится системная дата и последним оператором управление передается объекту «ПолеСоСписком8». Это поле со списком, которым мы заменили «Код клиента».

Заметим, что создание нового номера заказа аналогично созданию новых кода товара и кода клиента. Однако в соответствующих формах сначала создавалось несвязанное поле, где вычислялся новый код, а затем при возникновении события «До обновления» рассчитанный код помещался в соответствующее поле. Здесь же мы обошлись без создания поля, сразу рассчитав новый номер заказа и присвоив его полю «Номер заказа». Этот вариант гораздо проще. Вся процедура обработки события «Нажатие кнопки» вместе с добавленным фрагментом будет выглядеть так.

Private Sub Кнопка13_Click()

On Error GoTo Err_Кнопка13_Click

DoCmd.GoToRecord , , acNewRec

If Nz([Номер заказа]) = 0 Then

[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1

[Дата заказа] = Date()

End If

DoCmd.GoToControl "ПолеСоСписком17"

Exit_Кнопка13_Click:

Exit Sub

Err_Кнопка13_Click:

MsgBox Err.Description

Resume Exit_Кнопка13_Click

End Sub

Создание кнопки оплата.

Следующим объектом, который нужно создать является кнопка «Оплата». Кнопка создается обычным путем. В появившейся серии окон нужно выбрать позиции, как показано на рисунках.

Окончание построения кнопки выполняется обычным путем.

Создание поля с итоговой суммой.

И последним объектом, который необходимо создать в форме «Заказы», является поле с итоговой суммой по заказу. В подчиненной форме «Спецификация» такое поле было построено как скрытое (имя поля «Поле15» ). Для того, чтобы показать значение этого поля в форме «Заказы», необходимо создать несвязное поле и в его свойстве «Данные» создать с помощью построителя выражений ссылку на соответствующее поле в форме «Спецификация» следующего вида:

Выражение [Спецификация].Form![Поле15] попадет в свойство «Данные» построенного поля, если при выборе подсвеченных позиций построителя выражений нажать кнопку «Вставить», а затем «ОК».

После сохранения форма «Заказы» готова к работе. Ее конечный вид должен быть примерно таким.

В результате всей предыдущей работы были созданы ряд форм для ввода данных в базу. Однако выбор и открытие этих форм из вкладки «Формы» не удобен для конечного пользователя. Необходимо создать организующую форму с удобным интерфейсом, которая позволила бы работать с набором форм, вызывая их с помощью кнопок. Для создания таких форм в ACCESS предусмотрен механизм создания кнопочных форм.