Практические рекомендации по реализации проекта

На Access.

 

При разработке проекта, прежде всего, следует тщательно разработать концептуальную схему, обеспечивая пребывание ее в третьей нормальной форме. Затем разобрать, какие из таблиц можно заполнять независимо от других, и какие из них следует заполнять, используя данные других таблиц. В примере, разобранном в § 4 независимо можно заполнять таблицы «Актер» и «Пьеса». Таблица «Роль» заполняется, используя данные из таблицы «Пьеса», а таблица «Спектакль» - «Актер» и «Роль». Для заполнения таблиц «Актер» и «Пьеса» можно построить форму с помощью мастера форм (Рис. 5). Тогда данные таблицы можно заполнять через полученную форму. Аналогичную форму можно построить и для заполнения таблицы «Пьеса».

Заполнение таблицы роль тоже можно осуществить с помощью формы, построенной с помощью мастера. Такие формы обеспечивают модификацию и внесение новых записей. Построение таких форм допускается, если у них есть не более одной связи типа многие-к-одному (см. схему данных, рис. 4.). Построенная с помощью мастера форма для заполнения списка ролей может выглядеть примерно так как показано на рис. 6. Список ролей в этом случае приводится в подчиненной форме, где его можно пополнять, модифицировать, удалять записи и так далее.

Заполнять форму «Спектакль» таким образом невозможно, поскольку у этой таблицы две связи многие-ко-многим. Правильнее сказать такую форму можно создать (рис.7), но пополнять таблицу «Спектакль» или «Пьеса» в таких формах невозможно.

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

Схемы иерархии.

Для построения полноценного проекта необходимо разработать схему функционирования проекта, то есть последовательность открытия форм и последовательность перехода от одной формы к другой. Иными словами необходимо построить схему иерархии.

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

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

Свойства объектов разделяются на свойства этапа разработки и свойства этапа выполнения. Свойства этапа разработки – это свойства, значение которых можно установить при работе в режиме конструктора. Эти свойства перечислены в списке свойств объекта. Свойства этапа выполнения – это свойства , значения которых можно устанавливать или только считывать во время выполнения приложения. Эти свойства не указаны в списке свойств объекта. Для того. чтобы использовать таймер при ограничении времени появления заставки проекта, в свойствах формы закладки «События» пункт интервал таймера задает в миллисекундах задержку выполнения команды пункта «Таймер».

После закрытия заставки должна появляться главная управляющая форма, которая руководит передачей управления в проекте. Иерархическая схема представлена на рис. 8. Управляющую форму можно выполнить в режиме конструктора и снабдить рядом кнопок, которые в свою очередь открывают формы для выбора заполнения, просмотра или выборки таблиц. Однако можно сразу на управляющей форме внести уточнение, какую из таблиц мы хотим заполнять. Это можно сделать, поместив на управляющей форме группу переключателей, которые обеспечивают открытие той или иной формы. Управляющая форма в этом случае может иметь вид, представленный на рис. 9. Обработка кнопки заполнение форм осуществляется с помощью программного кода, представленного ниже. Кнопка просмотр занятости актеров открывает окно рисунка 3 предназначенного просмотреть занятость актера на данный момент. Напомним, что эта форма создавалась с помощью мастера и данные в полях ввода не могут быть изменены. Обработка нажатия этой кнопки осуществляется с помощью макроса. Третья кнопка открывает вспомогательную форму, где будут уточняться, какие выборки необходимо сделать. Тема выборки уточняется на управляющей форме.

Заполнение форм «Актер», «Пьеса» и «Роль» было рассмотрена выше и для создания форм, связанных с этими таблицами, вполне достаточно использовать мастер построения форм. Форму «Спектакль» необходимо заполнять, исходя из данных таблиц «Роль» и «Актер». Для ее заполнения создадим форму, представленную на рис.10. На форме предложены два списка, имеющих имена «ВыборРоли» и «ВыборАктера». Свойство Column(0) этих списков совпадает с кодом роли и кодом актера. Именно эти

 

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

Источник данных для списков «ВыборРоли» и «ВыборАктера» формируется из следующих запросов.

 

 

 

Список «ВыборРоли»

 

SELECT [Запрос2].[КодРоли], [Запрос2].[роль], [Запрос2].[Название], [Запрос2].[Автор] FROM Запрос2;

Список «ВыборАктера»

SELECT [Актер].[КодАктера], [Актер].[Фамилия] & " " & left([Актер].[Имя],1) & "." & left([Актер].[Отчество],1) & ".", [Актер].[Звание] FROM Актер;

 

Запрос2 имеет вид

SELECT Роль.КодРоли, Роль.роль, Пьеса.Название, Пьеса.Автор

FROM Пьеса INNER JOIN Роль ON Пьеса.КодПьесы = Роль.КодПьесы;

 

Запросы можно формировать как с помощью конструктора, так и используя язык запросов SQL. Первые два запроса были записаны в свойствах соответствующих списков на стадии разработки, используя язык SQL, а последний был построен с помощью конструктора. Более подробно методы построение запросов будут рассмотрены в следующем параграфе.

Кнопка «Закрыть» закрывает данную форму. Активной становится управляющая форма, представленная на рис. 9.

 

Создание запросов.

 

Для создания запросов в Access используется либо конструктор создания запросов, либо инструкция Select, являющаяся ядром языка SQL(Structured Query Language). Она используется для отбора строк и столбцов из таблицы базы данных и содержит пять основных предложений. В общем случае ее синтаксис можно представить в следующем виде:

Select <Список_полей>

From <Список_таблиц>

[Where< спецификация_отбора_строк>]

[Group by <Спецификация_группировки>]

[Having <Спецификация_отбора_групп>]

[Order by <Спецификация_сортировки>]

Список полей может содержать список имен столбцов таблиц или запросов базы данных или список выражений. Например, запрос, данные которого используются в списке «ВыборАктера» (рис.10), содержит выражение

[Актер].[Фамилия] & " " & left([Актер].[Имя],1) & "." & left([Актер].[Отчество],1) & ".", которое на основе полей таблицы «Актер» формирует фамилию актера с инициалами.

 

Предложение From указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции Select. Если информация выбирается из нескольких связанных таблиц, то предложение From более сложным и включает в себя предложение inner join, с помощью которого осуществляется связь таблиц. Оно имеет вид:

FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 оператор таблица_2.поле_2

В качестве примера приведем еще раз текст зароса2, который как раз иллюстрирует использование в запросе нескольких таблиц.

SELECT Роль.КодРоли, Роль.роль, Пьеса.Название, Пьеса.Автор

FROM Пьеса INNER JOIN Роль ON Пьеса.КодПьесы = Роль.КодПьесы;

Оператор описывает условие связывания таблиц. Операции JOIN могут быть вложенными; в таком случае используйте следующий синтаксис:

SELECT поля
FROM таблица_1 INNER JOIN (таблица_2 INNER JOIN

(таблица 3 ON таблица_2.поле_2 оператор таблица_3.поле_3)
ON таблица_1.поле_1 оператор таблица_2.поле_2;

Предложение WHERE определяет, какие записи из таблиц, перечисленных в предложении From, следует включить в результат выполнения инструкции Select. После предложения WHERE должны стоять условия отбора записей. Например, выбрать всех актеров, участвующих в спектаклях в текущий день. Такой запрос может быть записан так: