Function НачалоСледующегоМесяца()

НачалоСледующегоМесяца=DateSerial(Yеаг(Now), Month(Now) +1,1)

End Function

Данная функция состоит из единственной инструкции присваивания, в которой результат выражения (стоящего справа от знака равенства) присваивается функции «НачалоСледующегоМесяца» (имя которой стоит слева от знака равенства). Результат рассчитывается с помощью встроенных функций Visual Basic DateSerial, Year, Now и Month.

После создания функции ее можно использовать в Microsoft Access в любых выражениях. Например, чтобы сделать дату первого дня следующего месяца значением, которое поле получает по умолчанию, следует в окне свойств определить свойство этого поля Значение по умолчанию (DefaultValue) с помощью следующего выражения: =НачалоСледующегоМесяца().

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

Процедуры Sub и Function могут принимать аргументы.

Создание пользовательских процедур Visual Basic для приложений. Используя в базе данных процедуры Visual Basic, можно управлять взаимодействием таблиц, форм, отчетов и запросов этой базы данных. Существует несколько типов процедур. Можно создать процедуру обработки события, добавив ее код в предопределенные шаблоны в модуле формы или модуле отчета. Можно также создавать собственные процедуры Function и процедуры Sub в стандартных модулях или в модулях класса (которые содержат модули форм и отчетов).

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

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

Чтобы открыть новый модуль класса, не связанный с формой или отчетом, выберите команду Class Moduleв меню Insert. Для того чтобы открыть существующий модуль класса, щелкните ярлык Модули в списке Объекты, выберите модуль, который требуется открыть, а затем нажмите кнопку «Конструктор» на панели инструментов окна базы данных.

Объявите функцию, введя инструкцию Function. Введите имя функции, а следом все аргументы функции в круглых скобках. Например, следующая инструкция описания функции IsLoaded указывает строковый аргумент strFormName:

 

Function IsLoaded(strFormName As String) As Boolean

 

Добавьте программу Visual Basic, выполняющую операции или вычисления, которые должна выполнять функция.

Создание специальной процедуры Sub. Для создания специальной процедуры откройте модуль. Объявите процедуру, введя инструкцию Sub. Введите имя процедуры, а следом за ним все аргументы в круглых скобках. Например, следующая инструкция описания процедуры Sub с именем ShowEvent указывает строковый аргумент EventName:

Sub ShowEvent(EventName As String)

Добавьте программу на языке Visual Basic, выполняющую операции, которые должна выполнять процедура.

Создание процедуры обработки события. В Microsoft Access можно легко создать процедуру обработки событий. При указании для свойства события формы, отчета или элемента управления значения «Процедура обработки события» Microsoft Access создает заготовку процедуры обработки события. Пользователю остается только добавить программу, которую требуется выполнять в ответ на конкретное событие формы, отчета или элемента управления. Например, можно запустить программу при нажатии пользователем кнопки или при изменении данных.

Для создания процедуры обработки события сделайте следующее:

1. Откройте форму или отчет в режиме конструктора формы или режиме конструктора отчета. Выведите на экран окно свойств формы, отчета либо раздела или элемента управления в форме или отчете. Перейдите на вкладку События и выберите свойство события, в ответ на которое должна выполняться процедура. Например, для того чтобы открыть процедуру обработки события «Изменение» (Change), выберите свойство Изменение (OnChange).

2. Нажмите кнопку построителя рядом с ячейкой свойства, чтобы открыть диалоговое окно Построитель. Дважды щелкните элемент Программы, чтобы отобразить инструкции Sub и End Sub в модуле формы или модуле отчета. Эти инструкции описывают (определяют) процедуру обработки события. Microsoft Access автоматически описывает в модуле формы или отчета процедуры обработки события для каждого объекта и события с использованием ключевого слова Private, указывающим, что доступ к этой процедуре возможен только из других процедур в том же модуле.

3. Добавьте в процедуру программу, которая должна выполняться в ответ на событие. Например, для подачи звукового сигнала через динамик компьютера при изменении данных в поле «Название» включите инструкцию Веер в процедуру обработки события Haзвание_Change:

Private Sub Haзвание _Change()

Beep

End Sub

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

Разработка модуля обработки события нажатия кнопок. Создайте модуль, обрабатывающий события нажатия двух кнопок на форме Форма_с_кнопкой. Кнопка «Мальчики» включает фильтр для отображения из таблицы Учащиеся в форме только мальчиков, а кнопка «Девочки» включает фильтр для отображения из таблицы Учащиеся в форме только девочек.

Сначала сохраним описанный ранее Макрос1, позволяющий просмотреть записи об учащихся женского пола в виде модуля. Для этого, открыв в окне конструктора Макрос!, выберем в меню Файл команду Сохранить как, а затем в диалоговом окне сохранения укажем на сохранение процедуры обработки события нажатия кнопки из макроса в виде модуля под именем Модуль!. Затем подтвердим преобразование макроса в модуль, включив добавление примечаний и процедур обработки ошибок и щелкнув кнопку «Преобразовать». После выполнения преобразования макроса в модуль на экран будет выведено сообщение об окончании преобразования, а затем раскроется окно Microsoft Visual Basic с текстом данного модуля, как показано на рис. 31.

Рис. 31. Окно Microsoft Visual Basic с текстом модуля

Как видно из этого рисунка, редактор Visual Basic представляет собой среду разработки, предназначенную для создания и редактирования программ на языке Visual Basic для приложений (VBA), содержащихся в файлах, создаваемых в приложениях Microsoft Office, включая базы данных Microsoft Access и проекты Microsoft Access. Редактор включает в себя окно проекта, окно свойств, окно просмотра объектов и окно программы, а также средства отладки. Используя команды в меню View (Вид), можно открыть соответствующие окна.

Изучив текст модуля, вы увидите, что в нем в виде процедуры Sub описаны действия: открыть таблицу Учащиеся, открыть для нее форму и задать фильтр отбора данных по условию [Пол]<>Тrue.

Выбрав в списке объектов Формы, откройте форму Форма_с_кнопкой в режиме конструктора, добавьте кнопку и задайте ей надпись «Мальчики». Вызвав контекстное меню для созданной кнопки, выберите команду Обработка событий. В окне Построитель выберите вариант Программы и щелкните «ОК». После этого в окне Visual Basic откроется окно модуля. Запишите в нем процедуру обработки щелчка этой кнопки, указав в качестве условия отбора данных [Пол]=Тrue.

Private Sub Кнопка10_Сlick()

Открыть таблицу

Err_KHonKa_Click: ' процедура вывода сообщения об ошибке MsgBox Err.Description Resume Exit_KnonKa_Click End Sub ' конец процедуры печати

 

Можно внести изменения в текст данной процедуры. Они будут сохранены при сохранении изменений в структуре формы.

 

Связь между таблицами и целостность данных

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

Типы связей между таблицами. При установлении связи между таблицами возможны три типа связей.

1. Отношение «один-ко-многим». Это наиболее часто используемый тип связи между таблицами. В отношении «один-ко-многим»каждой записи в таблице А могут соответствовать несколько записей в таблице В, но запись в таблице В не может иметь более одной соответствующей ей записи в таблице А.

2. Отношение «многие-ко-многим». При этом типе связи одной записи в таблице А могут соответствовать несколько записей в таблице В, а одной записи в таблице В - несколько записей в таблице А.Этот тип связи возможен только с помощью третьей (связующей) таблицы, первичный ключ которой состоит из двух полей, которые являются внешними ключами таблиц А и В. Отношение «многие-ко-многим» по сути представляет собой два отношения «один-ко-многим» с третьей таблицей. Например, отношение «многие-ко-многим» между таблицами «Заказы» и «Товары» определяется путем создания двух отношений «один-ко-многим» с таблицей «Заказано».

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

Тип отношения в создаваемой Microsoft Access связи между таблицами зависит от способа определения связываемых полей. Отношение «один-ко-многим» создается в том случае, когда только одно из полей является ключевым или имеет уникальный индекс. Отношение «один-к-одному» создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы. Отношение «многие-ко-многим» фактически является двумя отношениями «один-ко-многим» с третьей таблицей, первичный ключ которой состоит из полей — внешних ключей двух других таблиц.

Целостность данных. Для поддержания связей между записями в связанных таблицах, а также обеспечения защиты от случайного удаления или изменения связанных данных в Microsoft Access используется механизм поддержки целостности данных.

Целостность данных означает:

· в связанное поле подчиненной таблицы можно вводить только те значения, которые имеются в связанном поле главной таблицы;

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

Установить целостность данных можно, если выполнены следующие условия.

1. Связанное поле главной таблицы является ключевым полем или имеет уникальный индекс. В большинстве случаев связывают первичный ключ (представленный в списке полей полужирным шрифтом) одной таблицы с соответствующим ему полем (часто имеющим то же имя) второй таблицы, которое называют полем внешнего ключа.

2. Связанные поля не обязательно должны иметь одинаковые имена, но они должны иметь одинаковые типы данных (из этого правила существуют два исключения) и иметь содержимое одного типа. Кроме того, связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля (FieldSize).

Исключения: 1) поле счетчика можно связывать с числовым полем, свойство Размер поля (FieldSize) которого имеет значение Длинное целое; 2) поле счетчика можно связать с числовым, если для обоих полей в свойстве Размер поля (FieldSize) задано значение Код репликации.

3. Обе таблицы принадлежат одной базе данных Microsoft Access. Если таблицы являются связанными, то они должны быть таблицами Microsoft Access. Для установки целостности данных база данных, в которой находятся таблицы, должна быть открыта. Для связанных таблиц из баз данных других форматов установить целостность данных невозможно.

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

Установив целостность данных, необходимо следовать следующим правилам:

1. Невозможно ввести в поле внешнего ключа связанной таблицы значение, не содержащееся в ключевом поле главной таблицы. Однако в поле внешнего ключа возможен ввод значений Null, показывающих, что записи не являются связанными. Например, нельзя сохранить запись, регистрирующую заказ, сделанный несуществующим клиентом, но можно создать запись для заказа, который пока не отнесен ни к одному из клиентов, если ввести значение Null в поле Код Клиента.

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

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

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

Чтобы преодолеть ограничения на удаление или изменение связанных записей, сохраняя при этом целостность данных, следует установить флажки Каскадное обновление связанных полей и Каскадное удаление связанных полей.

Режимы каскадного обновления и каскадного удаления. Для отношений, в которых проверяется целостность данных, пользователь имеет возможность указать, следует ли автоматически выполнять для связанных записей операции каскадного обновления и каскадного удаления. Если включить данные параметры, станут возможными операции удаления и обновления, которые в противном случае запрещены условиями целостности данных. Чтобы обеспечить целостность данных при удалении записей или изменении значения первичного ключа в главной таблице, автоматически вносятся необходимые изменения в связанные таблицы.

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

Примечание. Если в главной таблице ключевым полем является поле счетчика, то установка флажка Каскадное обновление связанных полей не приведет к каким-либо результатам, так как изменить значение поля счетчика невозможно.

Если при определении отношения установить флажок Каскадное удаление связанных записей, любое удаление записи в главной таблице приведет к автоматическому удалению связанных записей в подчиненной таблице.

Например, при удалении из таблицы «Клиенты» записи конкретного клиента будут автоматически удалены все связанные записи в таблице «Заказы» (а также записи в таблице «Заказано», связанные с записями в таблице «Заказы»).

Если записи удаляются из формы или таблицы при установленном флажке Каскадное удаление связанных записей, Microsoft Access выводит предупреждение о возможности удаления связанных записей.

Если же записи удаляются с помощью запроса на удаление, то Microsoft Access удаляет записи автоматически без вывода предупреждения.