logo
Базы Данных_ответы

19. Макросы и их конструирование.

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

Макросу присваивается заданное пользователем имя. Если макросу присвоить стандартное имя AUTOEXEC, то такой макрос будет выполняться автоматически сразу же после загрузки Access. Макрос состоит из макрокоманд. Для создания макроса следует:

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

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

Макрокоманды выполняются в порядке их расположения в бланке. Однако Access позволяет задать условие выполнения определенных макрокоманд. Условие задается в столбце Условие (для вывода столбца следует выполнить команду ВИД/Условие) и представляет собой условное выражение. Условное выражение можно ввести с клавиатуры или задать с помощью построителя выражений. В ячейках столбца Условие нельзя использовать выражения SQL.

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

Access позволяет объединять группу родственных макросов в один макрос. В этом случае макет макроса (окно макроса в режиме конструктора) должен содержать столбец Имя макроса. Чтобы его вывести, нужно выполнить команду ВИД/Имена макросов.

Для запуска макроса из группы макросов следует указать:

Имя Группы макросов. Имя Макроса.

20. Хранимые процедуры. Триггеры. Транзакции.

Хранимая процедура — объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. В хранимых процедурах могут выполняться стандартные операции с базами данных (как DDL, так и DML). Кроме того, в хранимых процедурах возможны циклы и ветвления, то есть в них могут использоваться инструкции управления потоком.

Хранимые процедуры обычно создаются с помощью языка SQL или конкретной его реализации в выбранной СУБД. В некоторых СУБД возможно использование хранимых процедур, написанных на любом языке программирования, способном создавать независимые исполняемые файлы, например, на C++ или Delphi. В терминологии Microsoft SQL Server такие процедуры называются расширенными хранимыми процедурами. Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.

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

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

В большинстве СУБД при первом запуске хранимой процедуры она компилируется (выполняется синтаксический анализ и генерируется план доступа к данным). В дальнейшем её обработка осуществляется быстрее.

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

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

Эти функции безопасности позволяют изолировать от пользователя структуру базы данных, что обеспечивает целостность и надежность базы.

Снижена вероятность таких действий как «инъекция SQL» (или «SQL-вторжение»), поскольку хорошо написанные хранимые процедуры дополнительно проверяют входные параметры перед тем, как передать запрос системе управления базами данных.

Триггер (англ. trigger) — это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено наступлением определенного события (действием) — по сути добавлением INSERT или удалением DELETE строки в заданной таблице, или модификаци UPDATE данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции. Момент запуска триггера определяется с помощью ключевых слов BEFORE (триггер запускается до выполнения связанного с ним события; например, до добавления записи) или AFTER (после события). В случае, если триггер вызывается до события, он может внести изменения в модифицируемую событием запись (конечно, при условии, что событие — не удаление записи).

Кроме того, триггеры могут быть привязаны не к таблице, а к представлению (VIEW). В этом случае с их помощью реализуется механизм «обновляемого представления». В этом случае ключевые слова BEFORE и AFTER влияют лишь на последовательность вызова триггеров, так как собственно событие (удаление, вставка или обновление) не происходит.

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

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

Иногда (чаще в банковской и экономической литературе) используется написание Трансакция.

Пример: Необходимо перевести с банковского счёта номер 5 на счёт номер 7 сумму в 10 денежных единиц. Этого можно достичь, к примеру, приведённой последовательностью действий:

прочесть баланс на счету номер 5

уменьшить баланс на 10 денежных единиц

сохранить новый баланс счёта номер 5

прочесть баланс на счету номер 7

увеличить баланс на 10 денежных единиц

сохранить новый баланс счёта номер 7

Эти действия представляют собой логическую единицу работы «перевод суммы между счетами», и таким образом, являются транзакцией. Если прервать данную транзакцию, к примеру, в середине, и не аннулировать все изменения, легко оставить владельца счёта номер 5 без 10 единиц, тогда как владелец счета номер 7 их не получит.

Различают обычные и распределённые транзакции. Распределённые транзакции подразумевают использование больше чем одной транзакционной системы и требуют намного более сложной логики (например, two-phase commit — двухфазный протокол подтверждения успеха). Также, в некоторых системах реализованы автономные транзакции, или под-транзакции, которые являются автономной частью родительской транзакции