- •Методические указания по проектированию учебной базы данных и приложений к ней
- •Цели и задачи курсового проектирования
- •Основные требования к курсовой работе.
- •Структура и содержание отчета по курсовой работе
- •Оформление курсовой работы
- •Список литературы
- •Методические указания к проектированию баз данных под управлением субд access Пример базы данных оптовой фирмы.
- •Этапы проектирования базы данных
- •Проектирование реляционной модели бд
- •8. Поле объекта ole
- •9. Гиперссылка
- •10. Мастер подстановок
- •Создание базы данных в среде субд access
- •Создание структуры таблиц
- •Объединение структур таблиц в единую схему
- •Проектирование приложения «Учет и анализ выполнения заказов»
- •Разработка форм ввода данных
- •Описание создания формы «Ввод справочника о товарах»
- •Описание создания формы «Заказы»
- •Создание макета формы «Заказы»
- •Создание подчиненной формы «Спецификация»
- •Создание связанной формы «Оплата»
- •Продолжение создания формы «Заказ»
- •Создание кнопочных форм
- •Создание запросов
- •Разработка первого запроса
- •Разработка второго запроса
- •Создание третьего запроса.
- •Создание четвертого запроса
- •Проектирование отчетов
- •Расширение функциональности приложений
- •Построение формы по результатам запроса
- •Использование объектов в приложениях
- •Использование базы данных в сети
Создание связанной формы «Оплата»
Еще одной формой, которая необходима для формы «Заказ» является форма «Оплата», которая в режиме конструктора имеет вид:
Форма создается для таблицы «Оплата» и имеет следующие особенности:
Создать форму с помощью мастера для всех полей таблицы с внешним видом - ленточный;
Скрыть поле «Номер заказа» и сузить его размер до минимального;
Автоматически сформировать «Номер заказа» перенеся его из формы «Заказы». Для этого в событии «До обновления» формы «Оплата» необходимо с помощью редактора создать процедуру обработки события следующего вида:
If Nz([Номер заказа] )= 0 Then
[Номер заказа] = Forms![Заказ]![Номер заказа]
End If
Эта процедура для каждой новой записи значению поля «Номер заказа» присваивает значение одноименного поля из формы «Заказы».
В примечание формы добавьте несвязанное поле с итоговой суммой по заказу, включив в свойство «Данные» формулу и изменив надпись как показано на рисунке.
Закройте созданную форму с сохранением изменений.
Продолжение создания формы «Заказ»
После создания формы «Оплата» можно продолжить разработку формы «Заказы». В дополнение к уже созданным элементам формы необходимо:
Вставить подчиненную форму «Спецификация»;
Добавить кнопку «Новый», которая позволит создать запись для нового заказа, присвоив ему очередной номер и задав дату заказа равную текущей дате.
Добавить кнопку, вызывающую форму «Оплата» с отображением записей только для данного заказа;
Создать поле с итоговыми суммами по заказу.
Указанные действия выполняются следующим образом.
Откройте ранее разработанную форму «Заказ» в режиме конструктора. Вставка подчиненной формы:
На вкладке панели элементов «Конструктор» щелкнуть в группе «Элементы управления» кнопку «Подчиненная форма/отчёт», а затем при нажатой левой клавише выделить место под подчиненную форму в форме «Заказ». После этого запускается мастер построения подчиненных форм. Первым окном, которое появится на экране, будет:
Следующее окно позволяет установить связь между основной и подчиненной формами. Для этого нужно установить положение переключателей, как показано на рисунке.
Последнее окно запрашивает имя подчиненной формы. Здесь нужно просто нажать кнопку «Готово». Далее следует отрегулировать размер прямоугольника под подчинённую форму, чтобы форма «Спецификация» разместилась целиком.
Создание кнопки «Новый»
Форма «Заказ» создана в режиме «В один столбец» и отображает сведения об одном заказе. В таких формах нет свободной строки для добавления новой записи, как это происходит в ленточных формах (формы «Справочник товаров», «Списки клиентов» и т.д.). Поэтому нужно создать средство для создания новой (пустой) записи о заказе. Тут же надо предусмотреть занесение в новый заказ номера заказа и даты заказа. Номер заказа будет формироваться по известному принципу: максимальный существующий номер плюс 1. В качестве даты заказа в большинстве случаев удобно использовать системную дату компьютера. Все эти действия реализуются программным кодом привязанным к нажатию кнопки. Для этого создадим кнопку с надписью «Новый».
При вставке в форму «Заказ» кнопки «Новый» (действия по созданию кнопки смотри ниже) в Access 2007 в событие «Нажатие кнопки» , как указывалось выше, добавляется внедрённый макрос. Можно, конечно, сделать указанные действия в виде макросов, но для этого вначале нужно было бы изучить специфические средства макросов. Поэтому программный код будем создавать в VBA.
Итак, сначала в форму необходимо вставить кнопку из вкладки «Конструктор», как это было описано выше, и выбрав категорию «Обработка записей» и действие «Добавить запись». В окне выбора формы кнопки необходимо включить переключатель «Текст» и ввести слово – Новый. Созданная кнопка позволяет добавлять новые записи в таблицу «Заказ». При создании кнопки СУБД автоматически добавляет в событие «Нажатие кнопки» внедрённый макрос обраб отки события следующего вида:
Преобразовать внедрённый макрос в программный код на VBA в Access 2007 невозможно, потому сформируем из внедрённого макроса изолированный. Для этого выделим два первых оператора макроса как показано на рисунке и скопируем в буфер (Ctrl-C). Оператор в третьей строке должен выдавать сообщение об ошибке, если будет невозможно создать новую запись о заказе. Но для наших целей он не нужен. Затем на вкладке «Создание» выбреем позицию «Макрос» как показано на рисунке:
В появившемся окне конструктора макроса вставим из буфера выделенные ранее строки и сохраним макрос под именем, например «НовыйЗаказ». Затем в свойствах кнопки «Новый» выберем событие «Нажатие кнопки» и для его обработки укажем вновь сформированный макрос как показано ниже.
Теперь событие обрабатывает не внедрённый, а изолированный макрос и его можно преобразовать в код VBA. Это делается так:
На вкладке «Работа с базами данных» нажать кнопку «Преобразовать макросы формы». В появившемся всплывающем окне
нажать кнопку «Преобразовать». О завершении преобразования сообщается транспорантом
Теперь событие обрабатывает программный код на VBA:
'------------------------------------------------------------
' Кнопка18_Click
'------------------------------------------------------------
Private Sub Кнопка18_Click()
On Error GoTo Кнопка18_Click_Err
DoCmd.GoToRecord , "", acNewRec
Кнопка18_Click_Exit:
Exit Sub
Кнопка18_Click_Err:
MsgBox Error$
Resume Кнопка18_Click_Exit
End Sub
Этот программный код имеет следующий смысл.
Операторы On Error ,MsgBox Error$ ,Resume являются операторами БЕЙСИКа и служат для организации обработки ошибок. Это стандартный набор операторов, создаваемый мастером построения кнопок. Оператор DoCmd.GoToRecord , , acNewRec осуществляет создание новой записи о заказе и переход к ней.
Однако в задачу кнопки входит также создание нового номера записи и занесение текущей даты в дату заказа. Поэтому в процедуру после оператора DoCmd.GoToRecord , , acNewRec необходимо добавить следующие операторы:
[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1
[Дата заказа] = Date()
DoCmd.GoToControl "ПолеСоСписком11"
Этим фрагментом программы в поле «Номер заказа» заносится максимальный код товара увеличенный на единицу; в поле «Дата заказа» заносится системная дата и последним оператором управление передается объекту «ПолеСоСписком11». Это поле со списком, которым мы заменили «Код клиента» ранее.
Заметим, что создание нового номера заказа аналогично созданию новых кода товара и кода клиента. Однако в соответствующих формах сначала создавалось несвязанное поле, где вычислялся новый код, а затем при возникновении события «До обновления» рассчитанный код помещался в соответствующее поле. Здесь же мы обошлись без создания поля, сразу рассчитав новый номер заказа и присвоив его полю «Номер заказа». Этот вариант гораздо проще. Вся процедура обработки события «Нажатие кнопки» вместе с добавленным фрагментом будет выглядеть так.
Private Sub Кнопка18_Click()
On Error GoTo Err_Кнопка18_Click
DoCmd.GoToRecord , , acNewRec
If Nz([Номер заказа]) = 0 Then
[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1
[Дата заказа] = Date()
End If
DoCmd.GoToControl "ПолеСоСписком11"
Кнопка18_Click_Exit:
Exit Sub
Кнопка18_Click_Err:
MsgBox Error$
Resume Кнопка18_Click_Exit
End Sub
Создание кнопки оплата.
Следующим объектом, который нужно создать является кнопка «Оплата». Кнопка создается обычным путем. В появившейся серии окон нужно выбрать позиции, как показано на рисунках.
О кончание построения кнопки выполняется обычным путем. В результате появляется кнопка с внедрённым макросом, при нажатии которой открывается форма «Оплата». При этом в форме отображаются только записи об оплате для текущего заказа.
Создание поля с итоговой суммой.
И последним объектом, который необходимо создать в форме «Заказы», является поле с итоговой суммой по заказу. В подчиненной форме «Спецификация» такое поле было построено как скрытое (имя поля «Поле15» ). Для того, чтобы показать значение этого поля в форме «Заказы», необходимо создать несвязное поле и в его свойстве «Данные» создать с помощью построителя выражений ссылку на соответствующее поле в форме «Спецификация» следующего вида:
Выражение [Спецификация].Form![Поле15] попадет в свойство «Данные» построенного поля, если при выборе подсвеченных позиций построителя выражений нажать кнопку «Вставить», а затем «ОК».
После сохранения форма «Заказы» готова к работе. Ее конечный вид должен быть примерно таким.
В результате всей предыдущей работы были созданы ряд форм для ввода данных в базу. Однако выбор и открытие этих форм из вкладки «Формы» не удобен для конечного пользователя. Необходимо создать организующую форму с удобным интерфейсом, которая позволила бы работать с набором форм, вызывая их с помощью кнопок. Для создания таких форм в ACCESS предусмотрен механизм создания кнопочных форм.