рефераты рефераты
Главная страница > Курсовая работа: Особенности разработки триггеров и хранимых процедур в СУБД  
Курсовая работа: Особенности разработки триггеров и хранимых процедур в СУБД
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Особенности разработки триггеров и хранимых процедур в СУБД

3.  Произойдет удаление строки с TAB_NO=1014 из таблицы NASH.

4.  Сработает триггер DEL_NASH и допишет в, уже наполовину заполненную строку таблицы DAN_D, данные из таблицы NASH, соответствующие этому сотруднику (WHERE TAB_NO_D=OLD.TAB_NO).

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

SET TERM ^;

CREATE TRIGGER Z_NASH FOR DANNIE

ACTIVE AFTER INSERT POSITION 0

AS

BEGIN

EXECUTE PROCEDURE VSTAV_NASH (NEW.TAB_NO);

END^

SET TERM;^

Хранимая процедура, вызываемая триггером.

SET TERM ^;

CREATE PROCEDURE VSTAV_NASH (T FLOAT)

AS

BEGIN

INSERT INTO NASH

VALUES (: T, 200, 307, 100, 0.5, 20);

END^

SET TERM; ^

При вставке строки

INSERT INTO DAN (FAM, IMIA,OTSH,G_R,ADRES,TEL)

VALUES ('Кротов', 'Андрей', 'Федорович', '12.08.1961', 'Кирова 52-124', '281344');

произойдет следующее:

1.  Сработает триггер VS_T, который присвоит новому сотруднику,

следующий по порядку, табельный номер.

2.  Заполнятся строка в таблице DANNIE соответствующими данными о новом сотруднике.

3. Срабатывает триггер Z_NASH, который вызывает ХП.

4. Хранимая процедура VSTAV_NASH вставляет в таблицу NASH данные (принятые по умолчанию) для нового сотрудника.

·  Управление состоянием триггера.

По умолчанию триггер создается активным, т. е. он будет срабатывать при осуществлении соответствующей операции. Состоянием триггера управляет ключевое слово ACTIVE в заголовке. Если же триггер сделать неактивным, то он не будет исполняться при возникновении операции. Это бывает полезным при осуществлении каких-либо внеплановых операций над данными, например массовой заливке данных или ручном исправлении данных. Чтобы отключить триггер, необходимо выполнить команду DDL:

ALTER TRIGGER <trigger name> INACTIVE;

·  Удаление триггеров.

Удаление триггера выполняется с помощью оператора DROP TRIGGER. Синтаксис оператора удаления таков:

DROP TRIGGER name;

Здесь name – имя триггера.

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

//Триггер срабатывает после удаления строки из таблицы DAN и записывает удаленную строку в таблицу UD_DAN.

SET TERM^;

CREATE TRIGGER CHRAN_UD_DAN FOR DAN

ACTIVE AFTER DELETE POSITION 0

AS

BEGIN

INSERT INTO UD_DAN

VALUES(OLD.TAB_NO,OLD.FAM,OLD.IMIA,OLD.OTSH,OLD.G_R,OLD.ADRES,OLD.TEL,OLD. DATA_P, OLD.DATA_U,OLD.OBRAZ,OLD.SEM_POLOJ,OLD.S_N_PASPORT,OLD.K_V,OLD.K_O,OLD.K_P);

END^

SET TERM;^

Выполняя команду

DELETE FROM DAN

WHERE TAB_NO=1000;

произойдет, конечно, удаление строки из таблицы DAN, сработает триггер, и удаленная строка запишется в таблицу UD_DAN, которая собственно и предназначена для хранения удаленных данных.

Что бы отключить триггер следует выполнить команду

ALTER TRIGGER <имя триггера> INACTIVE;

Включить триггер следует выполнить команду

ALTER TRIGGER <имя триггера> ACTIVE;

Для удаления триггера команда

DROP TRIGGER <имя триггера>;

·  Триггеры в MS Access

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

Пожелание разработчика в целом можно сформулировать так: "хочу иметь пользовательскую функцию, которая срабатывает всякий раз, когда данные в таблице меняются (точнее – хотят измениться!), такую, которая может либо запретить изменение, либо что-то в нем скорректировать, и такую, которую никак нельзя обойти". В современных СУБД такая функция называется триггером (trigger). Триггеры есть, в SQL Server.

В Access предлагалось достаточно примитивное решение проблемы: для заполнения любой таблицы обычно существует форма, у формы есть события, повесив на которые обработчики VBA можно достичь необходимого результата. Все это, в общем, было бы не плохо, если бы можно закрыть для пользователя доступ к редактированию данных непосредственно в таблицах. Но вот этого-то Access сделать до конца корректно не позволяет.

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

В основе Access лежит ядро баз данных Microsoft Jet. Объекты Access, доступные из VBA (в Access 2000 – из VB), являются на самом деле объектами ядра Jet. Те же обработчики событий в формах, например, мы имеем возможность писать благодаря тому, что объект ядра Jet Form поддерживает эти события. Ядро Jet имеет невысокие по сравнению с большими СУБД требования к ресурсам системы, обладая при этом достаточно большим потенциалом. Именно поэтому Access выглядит таким мобильным и годится для решения многих практических задач на достаточно современном уровне с минимальным количеством накладных расходов.

На уровне ядра Jet в Microsoft Access 2000 триггеров нет! Это продиктовано чисто коммерческими соображениями и связано с желанием Microsoft стремительно продвигать на рынок технологии, использующие SQL Server 7.0. В документации по Access триггером иногда называется группа кнопок, выполняющих функции переключателей – так это не те триггеры.

И в то же время, возможность использовать триггеры в Access 2000 есть. Microsoft теперь считает, что время Jet прошло и настала очередь больших корпоративных СУБД. Таких как SQL Server 7.0. Предусмотрено постепенное вытеснение Jet технологиями клиент-сервер. Появилось новое ядро баз данных MSDE (Microsoft Database Engine), очень тесно совместимое с SQL Server 7.0, практически это сильно усеченный SQL Server. Работая через это ядро можно хранить данные в формате SQL Server 7.0. Именно это рекомендуется делать тем, кто хочет иметь триггеры в Access 2000.

Загрузить в Access 2000 БД, которую мы хотим конвертировать в формат SQL Server 7.0, и запустить Upsizing Wizard . Wizard сделает все, что нужно, БД будет храниться далее в формате MS SQL Server 7.0, а не в mdb-файле. В Access вместо mdb мы будем загружать файл проекта adp.

Мы получаем возможность использовать виды (views), триггеры (triggers) и хранимые процедуры (stored procedures) SQL Server, редактируя их непосредственно из Access. Повышается уровень безопасности транзакций, появляются еще кое-какие плюсы, которые разработчика под Access обычно мало волнуют. Поскольку БД становится полностью совместима с SQL Server, можем пользоваться всем. При этом у нас остается весь инструментарий Access по разработке пользовательского интерфейса. Мы можем использовать также защиту данных на уровне SQL Server. Таблица Access в режиме дизайна начинает выглядеть так, как в Enterprise Manager SQL Server 7.0. Исчезает также вкладка Queries, вместо нее появляются вкладки Views и Stored Procedures.

Какие минусы?

Система становится заметно более тормозной. Хорошо для корпоративных решений, но совсем плохо для настольных баз данных. Чтобы писать триггеры, придется освоить язык, на котором они пишутся – Transact-SQL. Чтобы полноценно использовать предоставленные Вам возможности, нужно знать SQL Server 7.0

// MS Access

Отчет 6

Фамилия название профессии

ИВАНОВ начальник караула

пожарный

КУКУШКИНзаместитель по тылу

ПЕТРОВпожарный

СИДОРОВпожарный

СИДОРЧУКначальник части

ФРОЛОВАинспектор

секретарь

Option Compare Database

Sub Form_Current()

On Error GoTo Form_Current_Err

If ChildFormIsOpen() Then FilterChildForm

Form_Current_Exit:

Exit Sub

Form_Current_Err:

MsgBox Error$

Resume Form_Current_Exit

End Sub

Sub ToggleLink_Click()

On Error GoTo ToggleLink_Click_Err

If ChildFormIsOpen() Then

CloseChildForm

Else

OpenChildForm

FilterChildForm

End If

ToggleLink_Click_Exit:

Exit Sub

ToggleLink_Click_Err:

MsgBox Error$

Resume ToggleLink_Click_Exit

End Sub

Private Sub FilterChildForm()

If Me.NewRecord Then

Forms![данные].DataEntry = True

Else

Forms![данные].Filter = "[код профессии] = " & Me.[код профессии]

Forms![данные].FilterOn = True

End If

End Sub

Private Sub OpenChildForm()

Страницы: 1, 2, 3, 4, 5, 6

рефераты
Новости