Построение формы по результатам запроса

Расширение функциональности приложений

Придумайте 3-4 запроса для данной базы и оформите их результаты в виде отчетов и сделайте описание SQL выражений этих запросов.

 

 

Разработанное приложение может дополняться различными запросами и формами по мере изменения требований к функциональности приложения. Рассмотрим три возможных изменения приложения:

1. При создании третьего запроса - «Какие организации заказали тот или иной товар и сколько?» был выявлен недостаток: этим запросом очень неудобно пользоваться, так как для его реализации необходимо помнить точные наименования товаров. Устранить его достаточно просто, создав форму на основе запроса.

2. Помимо рассмотренных выше типов данных, используемых в базе (числовые, символьные, даты), база данных СУБД Access позволяет хранить такие объекты как текстовые файлы, таблицы Excel, рисунки, картинки и т.д. Это могут быть документы относящиеся к заказу, расчеты связанные с заказом, изображения продукции. Для демонстрации этих возможностей создадим соответствующее поле в таблице «Заказы» и создадим объект в форме «Заказы».

3. Особенностью СУБД Access является то, что в одном файле хранится и база данных и приложение. Для одного пользователя работающего с базой это не представляет проблемы. Однако если проектируется многопользовательская система, то базу необходимо отделить от приложения. Это достаточно просто сделать. Тогда схема работы с базой будет выглядеть следующим образом. При наличии локальной сети mdb файл с базой данных устанавливается на один из компьютеров сети, который выполняет роль сервера, а установленные на других компьютерах приложения подключаются к базе данных.

Описанные дополнения будут подробно рассмотрены ниже. В связи с переходом на Office 2007 далее примеры панелей инструментов будут браться из этой версии.

 

Одним из вариантов создания такой формы может быть выполнение действий в следующей последовательности. Напомним, на рисунках показаны панели инструментов Access 2007. Вначале создается макет пустой формы. Для этого в закладке «Создание» следует нажать кнопку «Конструктор форм». Появившуюся пустую форму необходимо настроить следующим образом. Добавить заголовок и примечание формы, нажав кнопку «Заголовок» в закладке «Конструктор», в свойствах формы установить следующую позицию макета: Режим по умолчанию в «Ленточные формы», Полученная форма и её свойства представлены на последующих двух рисунках .

 

Теперь в форму можно добавить заголовок и поле со списком товаров. Создание поля со списком описано в разделе Создание подчиненной формы «Спецификация». В результате должна получиться заготовка проектируемой формы следующего вида.

Сохраните эту форму задав ей имя, например, «Товары в заказах» . Затем откройте её снова в режиме конструктора.

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

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

 

Теперь нужно закрыть запрос и согласиться на сохранение изменений в появившемся окне.

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

 

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

DoCmd.Requery

Вместе с заголовком процедуры обработки события фрагмент кода дожжен выглядеть так:

Private Sub ПолеСоСписком0_AfterUpdate()

DoCmd.Requery

End Sub

Второй недостаток ликвидируется установкой свойства «Разрешить добавления» в закладке «Данные» свойств формы в состояние «Нет».

Итоговый вид получившейся формы выглядит так.

 

 

Использование объектов в приложениях

Под объектами в данной работе будем понимать текстовые документы, таблицы Excel, презентации, изображения и так далее, хранимые в виде отдельного поля базы данных. Для хранения объектов СУБД Access предоставляет поле с типом «Поле объекта OLE». Предположим при оформлении заказов необходимо в заказ добавить возможность комментария, который может иметь вид любого из перечисленных объектов. Для этого в структуру таблицы «Заказ» добавим поле с именем Расчеткак показано на рисунке.И сохраним определение таблицы.

 

Затем в режиме «Конструктор» откроем форму «Заказ» и в примечание формы добавим поле Расчет. Форма должна принять следующий вид.

 

 

В режиме просмотра форма выглядит так.

 

 

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

После выбора типа объекта можно заполнить его требуемой информацией. Для рассматриваемого примера это будет выглядеть так.

 

Если объект уже существует можно изменить его или заменить другим.