Учебно-методический комплекс дисциплины (опд. Ф. 10) Базы данных (код и название дисциплины по учебному плану специальности)

Вид материалаУчебно-методический комплекс

Содержание


Работа №12. Разработка системы регламентированной отчетности
Работа №13. Перенос базы данных на Microsoft SQL Server 2000
Работа №14. Хранимые процедуры и триггеры
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   15


Работа №12. Разработка системы регламентированной отчетности

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


Средства для построения отчетов в Delphi:
    1. Компоненты QuickReport.
    2. Комбинация SQL-запросов с экспортом их результатов в Excel (по аналогии с формированием твердой копии справочников).
    3. В Delphi 7 включены новый генератор отчетов RAVE.
    4. Имеются несколько внешних генераторов отчетов, наиболее известные (хотя и являющиеся представителями продуктов двух совершенно разных классов) FastReport и Crystal Reports.


 Задание:

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



Работа №13. Перенос базы данных на Microsoft SQL Server 2000

На настоящий момент база данных и соответствующая прикладная информационная система в основном реализованы. Для обеспечения работы в многопользовательской среде и для повышения масштабируемости прикладной системы может потребоваться преобразование формата базы данных из файл-серверной СУБД Access в клиент-серверную СУБД. Целевой СУБД естественно выбрать СУБД Microsoft SQL Server 2000. Такой выбор обусловлен наличием удобных средств миграции в нее и минимальными потребностями в переделке прикладной системы.


 Задание:

Произведите преобразование базы данных в формат SQL Server. Для этого воспользуйтесь мастером Access. Узнайте у администратора имя сервера, на котором развернут SQL Server, идентификатор и пароль пользователя. Проанализируйте разные режимы преобразования, изучите отчет о процессе преобразования, формируемый мастером.




 Задание:

С помощью утилиты Enterprise Manager, установленной на Вашем компьютере, соединитесь с только что полученной базой данных и проанализируйте ее отличия от базы данных на Access. Обратите внимание на отличия в типах данных (например, во что преобразовался тип данных “счетчик” и др.)




 Задание:

Обеспечьте наличие диаграммы Вашей базы данных в SQL Server (создайте ее). Проанализируйте средства отображения диаграммы и сравните их с аналогичными для схемы данных в Access.




 Задание:

Получите скрипт на языке T-SQL для создания (развертывания) Вашей базы данных “с нуля”.




 Задание:

Выполните настройку UDL-файла, используемого в Вашем приложении для доступа к базе данных Access посредством интерфейса ADO, для доступа к новой базе данных SQL Server.

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

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




Работа №14. Хранимые процедуры и триггеры

Хранимые процедуры – это объект SQL Server, содержащий набор откомпилированных операторов для выполнения некоторого алгоритма.


 Более подробно хранимые процедуры и триггеры описаны в главе 11 Курса лекций.


Пример.

Пусть имеется 2 таблицы:


Person(PersonID INTEGER IDENTITY(1,1),

FirstName VARCHAR(50),

SurName VARCHAR(50),

BIRTHDATE DATETIME)

и

Adress(PersonID INTEGER, Adress VARCHER(50))


Тогда для ввода данных за раз в обе таблицы можно воспользоваться загружаемой процедурой:


CREATE PROCEDURE PersonInsert

@FirstName VarChar(50),

@SurName VarChar(50),

@BIRTHDATE DateTime = NULL,

@PersonAdress VARVHAR(50)

AS

DECLARE @PersonID INT

INSERT INTO Person (FirstName, SurName, BIRTHDATE)

VALUES (@FirstName, @SurName, @ BIRTHDATE)

SET @PersonID = IDENT_CURRENT(‘Person’)

INSERT INTO Adress(PersonID, PersonAdress)

VALUES (@PersonID, PersonAdress)




Для запуска процедуры на выполнение из интерактивной утилиты (например, Query Analyser) можно написать:


EXEC PersonInsert ‘Коля’, ‘Иванов’, ’15.05.1988’, ‘Новокузнецк пр.Металлургов, 33, 41’


В программе на Delphi для этого следует воспользоваться компонентом TADOStoredProc.


Триггер – это особый вид хранимой процедуры, способный реагировать на события. Создадим триггер для отслеживания и запрета ввода дублей имен людей в таблицу PERSON. Кроме того, этот же триггер будет использоваться для отметки о вводе сведений о новом человеке в таблицу протокола. Данный триггер относится к категории AFTER, т. е. выполняется после осуществления модификации данных. Но до завершения транзакции! Поэтому, единственный способ отменить ошибочные действия (например, ввод дубликатной информации) заключается в откате транзакции. (Вспомним, что существуют и триггеры BEFORE (перед, до выполнения операции). (Имеются также и триггеры INSTEAD OF, выполняющиеся вместо …).


Пример.

В дополнение к имеющимся таблицам введем еще одну:


LOG(PERSONID INTEGER, DAT DATETIME, UN VARCHAR(50))


Она будет использоваться для протоколирования операций добавления/изменения данных в таблице PERSON. Поле PERSONID содержит идентификатор человека, DAT – время операции ввода/изменеия, UN – имя оператора, выполнившего изменение.


CREATE TRIGGER LOGNEWS

ON PERSON

FOR INSERT, UPDATE

AS

BEGIN TRANSACTION

DECLARE @PERSONID INTEGER

DECLARE @C INTEGER

DECLARE @SURNAME VARCHAR(50)

DECLARE @FIRSTNAME VARCHAR(50)


SELECT @C = COUNT(*)

FROM PERSON, inserted i

WHERE PERSON.SURNAME = i.SURNAME AND PERSON.FIRSTNAME = i.FIRSTNAME


IF @C >1

BEGIN

RAISERROR(‘Вы пытаетесь ввести данные о человеке, уже зафиксированном в базе данных!’, 16, 1)

ROLLBACK TRANSACTION

END

ELSE

BEGIN

SELECT @PERSONID = i.PERSONID FROM inserted i


INSERT INTO LOG(PERSON, DAT, UN)

VALUES (@PERSONID, GETDATE(), USER)


COMMIT TRANSACTION

END




 Задание:

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