Проектирование многопользовательской информационной системы "Университетская библиотека"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.09.2012
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

CREATE VIEW Otdeli

AS

SELECT /*Указываем какие поля будут выбраны*/

Отделы.номер_отдела, Отделы.название_отдела, Сотрудники_библиотеки. фамилия,

Сотрудники_библиотеки. имя, Сотрудники_библиотеки. отчество

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Сотрудники_библиотеки ON Отделы. Номер_отдела = Сотрудники_библиотеки. Номер_отдела

GROUP BY номер. отдела /*По какому полю будут сгруппированы поля*/

WHERE Отделы.номер_отдела BETWEEN 10 AND 13 /*Выбираются отделы, номер которых находится между 10 и 13*/

8. Информация о месте хранения периодических изданий название которых содержит в себе слово «вестник», но при этом д.б. исключены периодические издания, первое слово которых начинается на «Э», например «Экономический вестник».

CREATE VIEW INFOPeriodika

AS

SELECT /*Указываем какие поля будут выбраны*/

Периодические_издания. Название, Периодические_издания. Дата_издания, Отделы. Название_отдела, Отделы. Номер_отдела

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Периодические_издания ON Отделы. Номер_отдела = Периодические_издания. Номер_отдела

WHERE Периодические_издания. Название LIKE '[^Э]%вестник % '

/*[^Э] запрещает начинаться первому слову на «Э», % вестник% - указывает на то, что оставшаяся часть названия должна содержать слово «вестник»*/

9. Полная информация об экземпляре, который был издан с 2000 до текущего года

CREATE VIEW FullInfoEkzemplar

AS

SELECT /*Указываем какие поля будут выбраны*/

Экземпляр.шифр, Книга. Автор, Книга. Название, Книга. Год_издания, Книга. Издательство, Экземпляр. Предметная_область, Экземпляр. Номер_отдела, Экземпляр. Отметка_о_списании, Экземпляр. Отметка_о_замене

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN

WHERE Книга. Год_издания BETWEEN 2000 AND YEAR (GETDATE())

/*GETDATE() возвращает текущую дату, YEAR (<дата>) - год <даты>*/

10. Информация о наличии книги в библиотеке

CREATE VIEW InfoAboutBook

AS

SELECT /*Указываем какие поля будут выбраны*/

Книга.ISBN, Экземпляр. Шифр, Экземпляр. Номер_отдела,

Пользование_библиотекой2. Дата_выдачи, Пользование_библиотекой2. Дата_приема

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой2 ON Экземпляр. Шифр = Пользование_библиотекой2. Шифр

WHERE Пользование_библиотекой2. Дата_приема BETWEEN Пользование_библиотекой2. Дата_выдачи AND GETDATE() /*Если книгу сдали, т.е. она в наличии в библиотеке, то дата приема будет между датой выдачи и текущей датой*/

11. Информация о месте хранения книги.

CREATE VIEW Books

AS

SELECT Книга. Автор, Книга. Название, Книга. Год_издания, Книга. Количество_страниц

FROM Книга

12. Информация о ценах на книги.

CREATE VIEW Cena

AS

SELECT Книга. Автор, Книга. Название, Книга. Цена

FROM Книга

13. Информация о сотрудниках.

CREATE VIEW Sotrudnik

AS

SELECT Сотрудники_библиотеки. имя, Сотрудники_библиотеки. фамилия,

Сотрудники_библиотеки. отчество, Сотрудники_библиотеки. дата_рождения, Сотрудники_библиотеки. должность

FROM Сотрудники_библиотеки

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

CREATE VIEW infoOPolzovaniiStudentov

AS

SELECT Студенты. Имя, Студенты. Фамилия, Книга. Автор, Книга. Название, Сотрудники_библиотеки. табельный_номер

FROM (((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой2 ON Экземпляр. Шифр = Пользование_библиотекой2. Шифр) INNER JOIN

Студенты ON Пользование_библиотекой2. Читательский_номер = Студенты. Читательский_номер) INNER JOIN

Сотрудники_библиотеки ON Пользование_библиотекой2. Табельный_номер = Сотрудники_библиотеки. табельный_номер

WHERE Сотрудники_библиотеки. табельный_номер LIKE '11 []'

15. Информация о пользовании библиотекой её сотрудниками.

CREATE VIEW InfoOPolzovaniiCotrydnikov

AS

SELECT Сотрудники_библиотеки. имя, Сотрудники_библиотеки. фамилия, Книга. Автор, Книга. Название

FROM Сотрудники_библиотеки INNER JOIN ((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN)

INNER JOIN Пользование_библиотекой1 ON Экземпляр. Шифр = Пользование_библиотекой1. Шифр)

ON Сотрудники_библиотеки. табельный_номер = Пользование_библиотекой1.табельный_номер

3.3 T-SQL-определения триггеров

1. Триггер, который будет запрещать удаление записей таблицы «Пользование библиотекой», если текущий пользователь не владелец базы данных и если поле «дата выдачи» содержит какое-либо значение.

CREATE TRIGGER udalenie /*Обьявляем имя триггера*/

ON Пользование_библиотекой2 /*Указываем имя таблицы, с которой будет связан триггер*/

FOR DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь на удаление)*/

AS

IF (SELECT count(*) /*проверяет записи из таблицы «Пользование библиотекой»*/

from Пользование_библиотекой2

where Пользование_библиотекой2.дата_выдачи is not null)>0 /*условие проверяет наличие записи в поле «дата выдачи». Если count возвращает значение отличное от нуля (означает, что запись есть) то первое условие IF не выполнено*/

AND (CURRENT_USER <> 'dbo') /*вызывается функция определения имени текущего пользователя и проверяется, владелец ли он*/

BEGIN

PRINT «у вас нет прав на удаление этой записи» /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION /*откат (отмена) транзакции*/

END

2. Проверяет правильность номера отдела. Существует лишь 5 отделов, которым присваиваются номера от 10 до 14 включительно.

CREATE TRIGGER dobavlenie

ON Отделы

FOR INSERT

AS

DECLARE @@f int /*Объявляем переменную*/

Set @@f=10 /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Отделы, inserted

WHERE Отделы. Номер_отдела = inserted. Номер_отдела)

Set @@f=0

IF EXISTS (SELECT * FROM Отделы, inserted

WHERE inserted. Номер_отдела>14 OR inserted. Номер_отдела<10) /*Если номер отдела не >14 или <10, то такой отдел не существует*/

Set @@f=0 /*Меняем значение переменной*/

If @@f=0 /*если f=0, значит были ошибки*/

BEGIN

PRINT «Неверно введены данные» /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION /*откат (отмена) транзакции*/

END

/*inserted - временная таблица, куда заносятся добавляемые данные*/

3. Триггер, который записывает при удалении записей из таблицы «Преподаватели» в отдельную таблицу информацию о дате удаления, пользователе,

Перед созданием такого триггера необходимо создать таблицу DeletedItems, куда будет производится запись:

CREATE TABLE DeletedItem (

[Читательский_номер] [int] NOT NULL, /*объявляем поля таблицы*/

[имя] [varchar] (25) NULL,

[отчество] [varchar] (75) NULL,

[фамилия] [varchar] (25) NULL,

[должность] [varchar] (35) NULL,

[Имя_пользователя] [varchar] (50) NULL,

[Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Сам триггер выглядит следующим образом;

CREATE TRIGGER deletedby

ON Преподаватели /*Связываем триггер с таблицей Преподаватели*/

FOR DELETE

AS

INSERT INTO DeletedItem

(Читательский_номер, имя, отчество, /*указываем, какие поля нужно вставить*/

фамилия, должность, Имя_пользователя, Дата_удаления)

SELECT Читательский_номер, имя, отчество, фамилия, должность,

SYSTEM_USER, /*функция определяет текущего пользователя*/

getdate() /*функция возвращает текущую дату*/

FROM deleted /*deleted - временная таблица, куда заносятся удаляемые данные*/

4. Триггер, который записывает при добавлении записей в таблицы «Сотрудники_Библиотеки» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу InsertedItemSotrydniki, куда будет производится запись:

CREATE TABLE InsertedItemSotrydniki

(

[табельный_номер] [int] NOT NULL, /*объявляем поля таблицы*/

[фамилия] [varchar] (25) NULL,

[имя] [varchar] (25) NULL,

[отчество] [varchar] (75) NULL,

[Дата_рождения] [datetime] NULL,

[должность] [varchar] (35) NULL,

[Имя_пользователя] [varchar] (50) NULL,

[Дата_добавления] [datetime] NULL

) ON [PRIMARY]

Сам триггер выглядит следующим образом;

CREATE TRIGGER infoInsertSotrud

ON Сотрудники_библиотеки /*Связываем триггер с таблицей Сотрудники_библиотеки */

FOR INSERT

AS

INSERT INTO InsertedItemSotrydniki (Табельный_номер, /*указываем, какие поля нужно вставить*/

фамилия, имя, отчество, Дата_рождения, должность, Имя_пользователя, Дата_добавления)

SELECT Табельный_номер, фамилия, имя, отчество, Дата_рождения, должность,

SYSTEM_USER, /*функция определяет текущего пользователя*/

getdate() /*функция возвращает текущую дату*/

FROM inserted /*inserted - временная таблица, куда заносятся добавляемые данные*/

5. Триггер, который записывает при изменении записей в таблице «Студенты» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу UpdatedStudents, куда будет производится запись:

CREATE TABLE UpdatedStudents

(

[читательский_номер] [int] NOT NULL,

[фамилия] [varchar] (25) NULL,

[Имя_пользователя] [varchar] (50) NULL,

[Дата_добавления] [datetime] NULL

) ON [PRIMARY]

Триггер выглядит следующем образом:

CREATE TRIGGER infoUpdateStudent

ON Студенты /*Связываем с таблицей*/

FOR UPDATE

AS

INSERT INTO UpdatedStudents (Читательский_номер, /*указываем, какие поля нужно вставить*/

фамилия, Имя_пользователя, Дата_добавления)

SELECT Читательский_номер, фамилия, /*указываем откуда*/

SYSTEM_USER, /*функция определяет текущего пользователя*/

getdate() /*функция возвращает текущую дату*/

FROM updated /*updated - временная таблица, куда заносятся данные*/

6. Триггер запрещает изменять в таблице «Пользование_библиотекой2» запись полей «дата_приема» и «дата выдачи» в воскресенье.

ALTER TRIGGER proverka ON Пользование_библиотекой2

FOR UPDATE

AS

IF UPDATE (дата_приема) /*Проверяет, какое поле обновляется*/

AND datename (dw, GETDATE()) in ('Sunday') /*Проверяет, является ли день воскресеньем*/

BEGIN

PRINT 'В воскресение нельзя принимать книги'

ROLLBACK TRANSACTION

END

IF UPDATE (дата_выдачи) /*Проверяет, какое поле обновляется*/

AND datename (dw, GETDATE()) in ('Sunday') /*Проверяет, является ли день воскресеньем*/

BEGIN

PRINT 'В воскресение нельзя принимать книги'

ROLLBACK TRANSACTION

END

/* datename (dw, GETDATE()) - GETDATE() получает текущую дату, datename (dw,<дата>) получает название дня недели*/

7. Триггер, который записывает при удалении записей из таблицы «Сотрудники_библиотеки» в отдельную таблицу информацию о дате удаления, пользователе,

Перед созданием такого триггера необходимо создать таблицу DeletedSotrudLibrary, куда будет производится запись:

CREATE TABLE DeletedSotrudLibrary (

[Табельный_номер] [int] NOT NULL, /*объявляем поля таблицы*/

[имя] [varchar] (25) NULL,

[фамилия] [varchar] (25) NULL,

[отчество] [varchar] (75) NULL,

[дата_рождения] [datetime] NULL,

[должность] [varchar] (35) NULL,

[номер_отдела] [int] NOT NULL,

[Имя_пользователя] [varchar] (50) NULL,

[Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Триггер:

CREATE TRIGGER deletesotrud

ON Сотрудники_библиотеки /*Связываем с таблицей*/

FOR DELETE

AS

INSERT INTO DeletedSotrudLibrary /*Указываем таблицу, куда будет производиться запись*/

(Табельный_номер, имя, фамилия, отчество, дата_рождения, /*Пречисляем поля таблицы*/должность, номер_отдела, Имя_пользователя, Дата_удаления)

SELECT /*Причисляем вносимые значения*/

Табельный_номер, имя, фамилия, отчество, дата_рождения, должность, номер_отдела,

SYSTEM_USER, getdate()

FROM deleted /*deleted - временная таблица, куда заносятся удаляемые данные*/

8. Триггер, который записывает при добавлении записей в таблицы «Преподаватели» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу InsertedItemPrepdavateli, куда будет производится запись

CREATE TABLE InsertedItemPrepdavateli

(

[Читательский_номер] [int] NOT NULL, /*объявляем поля таблицы*/

[имя] [varchar] (25) NULL,

[отчество] [varchar] (75) NULL,

[фамилия] [varchar] (25) NULL,

[должность] [varchar] (35) NULL,

[Имя_пользователя] [varchar] (50) NULL,

[Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Триггер:

CREATE TRIGGER infoInsertPred

ON Преподаватели

FOR INSERT

AS

INSERT INTO InsertedItemPrepdavateli

(Читательский_номер, имя, отчество, фамилия, должность, Имя_пользователя, Дата_удаления)

SELECT Читательский_номер, имя, отчество, фамилия, должность,

SYSTEM_USER, getdate()

FROM inserted

9. Триггер, запрещающий ввод значения в поле «год_поступления», если оно превышает номер текущего года.

CREATE TRIGGER proverka_Studentov ON Студенты FOR INSERT

AS

DECLARE @@t int /*Объявляем переменную*/

Set @@t=5 /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Студенты, inserted

WHERE Студенты.год_поступления = inserted.год_поступления)

Set @@t=0

IF EXISTS (SELECT * FROM Студенты, inserted

WHERE inserted.год_поступления>YEAR (GETDATE())) /*Проверяем, больше ли значения вводимого года, чем у текущего*/

Set @@t=0 /*Если да, то меняем значение переменной*/

If @@t=0 /*если f=0, значит были ошибки*/

BEGIN

PRINT «Неверно введен год поступления» /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION /*откат (отмена) транзакции*/

END

10. Триггер, запрещающий обновление значения в поле «год_отчисления», если оно превышает номер текущего года.

CREATE TRIGGER proverka_otchislenia_Studentov

ON Студенты

FOR UPDATE

AS

DECLARE @@t int /*Объявляем переменную*/

Set @@t=5 /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Студенты, inserted

WHERE Студенты.год_окончания = inserted.год_окончания)

Set @@t=0

IF EXISTS (SELECT * FROM Студенты, inserted

WHERE inserted.год_окончания>YEAR (GETDATE())) /*Проверяем, больше ли значения вводимого года, чем у текущего*/

Set @@t=0 /*Меняем значение переменной*/

If @@t=0 /*если f=0, значит были ошибки*/

BEGIN

PRINT «Неверно введен год отчисления» /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION /*откат (отмена) транзакции*/

END

3.4 T-SQL-определения хранимых процедур

1. Список выдач книг за текущий день.

CREATE PROCEDURE CpicokVidach

AS

SELECT /*Перечисляем поля, которые будут выведены в результате запроса */

Пользование_библиотекой2. Табельный_номер, COUNT (Пользование_библиотекой2. Дата_выдачи)

FROM /*указываем имя таблицы из которых выбираются записи*/

Пользование_библиотекой2

WHERE /*задаем условие отбора*/

Пользование_библиотекой2. Дата_выдачи=(SELECT GETDATE())

GROUP BY /*производится группировка по указанному полю*/

Табельный_номер

/*SELECT GETDATE() позволяет получить текущую дату (год, месяц, число)

COUNT (<поле>) возвращает количество записей какого-либо поля*/

2. Количество экземпляров какой-либо книги.

CREATE PROCEDURE KolExzemplarov

/*Объявляем необходимые переменные*/

@ISBN varchar(20)

AS

/* Следующая конструкция проверяет, существуют ли записи в таблице «Книги» с заданным ISBN*/

IF not EXISTS (SELECT * FROM Книга WHERE ISBN = @ISBN)

RETURN 0 /*Вызывает конец процедуры KolExzemplarov */

SELECT Экземпляр.ISBN

INTO TEMP1 /*Сохраняет выбранные поля во временной таблице Temp1*/

FROM Экземпляр

WHERE ISBN = @ISBN

SELECT COUNT(ISBN) /*Count подсчитывает количество неповторяющихся записей поля ISBN*/

FROM TEMP1

3. Список книг, которыми пользовался какой-либо студент

CREATE PROCEDURE CpicokKnigCtudenta

@Chit_nom int /*Объявляем необходимые переменные*/

AS SELECT Студенты. Имя, Студенты. Фамилия, Пользование_библиотекой2. Шифр, Книга. Автор, Книга. Название

FROM /*указываем имена таблиц, из которых выбираются записи*/

Книга, Экземпляр, Студенты, Пользование_библиотекой2

WHERE (Студенты. Читательский_номер = Пользование_библиотекой2. Читательский_номер) AND (Экземпляр. Шифр = Пользование_библиотекой2. Шифр) AND (Экземпляр.ISBN =Книга.ISBN)

/* AND позволяет задать в операторе WHERE несколько условий, которые должны выполняться одновременно*/

4. Удаление из таблицы «Студенты». Допустимо, если в таблице «Пользование библиотекой2» нет ссылающихся записей.

CREATE PROCEDURE DeleteStudent

@Chit_nom int /*Объявляем необходимые переменные*/

AS /*Проверяем, если ссылающиеся записи, если записей нет, разрешается удаление.*/

IF not EXISTS (SELECT * FROM Пользование_библиотекой2 WHERE Читательский_номер=@Chit_nom)

DELETE /*Оператор удаления*/

FROM Студенты /*Имя таблицы, откуда нужно удалить*/

WHERE /*Условие удаления - удаляем строку, для которой значение поля Читательский_номер совпадает с нужным*/

Читательский_номер=@Chit_nom

5. Вставка в таблицу «Заказы». Разрешена, если в таблицах «Книга» и «Преподаватели» есть записи, на которые будет ссылаться новая запись.

PROCEDURE NewZakaz

@Kolvo int, /*Объявляем необходимые переменные*/

@data_zakaza datetime,

@Chit_nomer int,

@ISBN varchar(20)

AS /*Проверяем, есть ли запись в таблице «Заказы» с такими же значениями ключевых полей, как у новой записи*/

IF EXISTS (SELECT * FROM Заказы WHERE ISBN = @ISBN AND Читательский_номер=@Chit_nomer)

RETURN 0 /*Если есть, завершаем выполнение процедуры*/

IF EXISTS (SELECT * FROM Преподаватели WHERE Читательский_номер = @Chit_nomer)

/*Проверили, есть ли в «Преподаватели» соответствующая запись*/

IF EXISTS (SELECT * FROM Книга WHERE ISBN = @ISBN)

/*Проверили, есть ли в «Книга» соответствующая запись*/

INSERT INTO Заказы /*Указываем таблицу, куда вставляем запись*/

VALUES (@Kolvo,@data_zakaza,@Chit_nomer, @ISBN) /*Указываем какие значения*/

6. Обновление таблицы «Студенты». Изменение фамилии студента.

CREATE PROCEDURE UpdateStudent

@Chit_nom int, /*Объявляем необходимые переменные*/

@Fam varchar(20)

AS

IF EXISTS (SELECT * FROM Студенты /*Проверяем, существуют ли студенты,*/

WHERE Читательский_номер = @Chit_nom) /*читательский номер которых равен искомому*/

UPDATE Студенты /*Если такие есть обновляем «Студенты»

SET Фамилия=@Fam /*полю фамилия присваиваем новое значение*/

WHERE Читательский_номер = @Chit_nom /*если читательский номер записи равен искомому*/

7. Вставка в таблицу «Пользование библиотекой2». Разрешается, если есть в таблицах «Студенты», «Сотрудники_библиотеки» и «Экземпляр» соответствующие записи.

ALTER PROCEDURE NewPolzovanieStydentov

@Chit_nomer int, /*Объявляем необходимые переменные*/

@data_vidachi datetime,

@data_priema datetime,

@tab_nomer int,

@Shifr varchar(20)

AS

IF EXISTS (SELECT * FROM Пользование_библиотекой2 /*Проверяем, нет ли уже в таблице */

WHERE Шифр = @Shifr AND /*записи с таким же значением первичного ключа*/

Читательский_номер=@Chit_nomer)

RETURN 0 /*если есть, завершается процедура*/

IF EXISTS (SELECT * FROM Студенты /*проверяем наличие соответствующей записи в*/

WHERE Читательский_номер = @Chit_nomer) /*таблице «Студенты»*/

IF EXISTS (SELECT * FROM Экземпляр /*проверяем наличие соответствующей записи в*/

WHERE Шифр = @Shifr) /*таблице «Экземпляр»*/

IF EXISTS (SELECT * FROM Сотрудники_библиотеки /*проверяем наличие соответствующей */

WHERE табельный_номер = @tab_nomer) /* записи в таблице «Сотрудники_библиотеки»*/

INSERT /*если условия выполняются, добавляем*/

INTO Пользование_библиотекой2 /*в таблицу новые значения*/

VALUES (@Chit_nomer,@data_vidachi,@data_priema,@tab_nomer,@Shifr)

8. Вставка в таблицу «Сотрудники_библиотеки». Проверяется, наличие соответствующей записи в поле номер-отдела в таблице «Отделы».

CREATE PROCEDURE NewSotrudnik

@Tab_nom int, /*Объявляем необходимые переменные*/

@Fam varchar(20),

@Name varchar(20),

@Sec_name varchar(20),

@data_rogd datetime,

@Dolgn varchar(20),

@Nom_otd int

AS

IF EXISTS (SELECT * FROM Сотрудники_библиотеки /*Проверяем, нет ли уже в таблице */

WHERE Табельный_номер = @Tab_nom) /*записи с таким же значением первичного ключа*/

RETURN 0 /*если есть, завершается процедура*/

IF EXISTS (SELECT * FROM Отделы /*Проверяем, есть ли уже в таблице «Отделы» */

WHERE Номер_отдела = @Nom_otd) /*записи с таким же значением поля номер_отдела*/

INSERT /*если условие выполняется, добавляем*/

INTO Сотрудники_библиотеки /*в таблицу новые значения*/

VALUES (@Tab_nom,@Fam, @Name, @Sec_name, @data_rogd, @Dolgn, @Nom_otd)

9. Сколько существует должностей в библиотеке.

CREATE PROCEDURE KolDolgn

AS SELECT COUNT (DISTINCT Сотрудники_библиотеки. должность)

FROM Сотрудники_библиотеки /*COUNT (DISTINCT <поле>) подсчитывает количество разноименных значений какого-либо поля в таблице*/

10. Обновление таблицы «Отделы». Изменился начальник отдела.

ALTER PROCEDURE UpdateOtdel

@Nom_otdela int,

@Fam_New_Nach_otd varchar(20),

@Tab_Nom_New_Nach_otd int

AS

IF not EXISTS (SELECT * FROM Сотрудники_библиотеки /*Условие проверяет, есть ли в */

WHERE табельный_номер = @Tab_Nom_New_Nach_otd /* библиотеке сотрудник с искомыми*/

AND фамилия=@Fam_New_Nach_otd) /*фамилией и табельным номером*/

RETURN 0 /*если нет, завершается процедура*/

IF EXISTS (SELECT * FROM Отделы /*Условие проверяет, есть ли в библиотеке*/

WHERE Номер_отдела = @Nom_otdela) /*искомый номер отдела*/

UPDATE Отделы

SET фамилия_начальника_отдела=@Fam_New_Nach_otd /*меняем значение поля «фамилия начальника отдела» на новое*/

UPDATE Отделы

SET табельный_номер_начальника=@Tab_Nom_New_Nach_otd /*меняем значение поля «табельный номер начальника отдела» на новое*/

WHERE Номер_отдела = @Nom_otdela /*меняем только для записи, у которой значение «номер_отдела» равно искомому*/

11. Вставка в таблицу «Списание экземпляров»

CREATE PROCEDURE NewCpicanExzemplar

@Prichina varchar(20),

@Nom_act int,

@tab_nomer int,

@Shifr varchar(20)

AS

IF EXISTS (SELECT * FROM Списанные_книги WHERE Шифр = @Shifr)

RETURN 0

IF EXISTS (SELECT * FROM Экземпляр WHERE Шифр = @Shifr)

IF EXISTS (SELECT * FROM Сотрудники_библиотеки WHERE табельный_номер = @tab_nomer)

INSERT INTO Списанные_книги VALUES (@Prichina, @Nom_act,@tab_nomer,@Shifr)

12. Вставка в таблицу «Пользование библиотекой2»

CREATE PROCEDURE NewPolzovanieBibliotekarej

@Tab_nomer int,

@data_vidachi datetime,

@data_priema datetime,

@Shifr varchar(20)

AS

IF EXISTS (SELECT * FROM Пользование_библиотекой1 WHERE Шифр = @Shifr AND Табельный_номер=@Tab_nomer)

RETURN 0

IF EXISTS (SELECT * FROM Экземпляр WHERE Шифр = @Shifr)

IF EXISTS (SELECT * FROM Сотрудники_библиотеки WHERE табельный_номер = @tab_nomer)

INSERT INTO Пользование_библиотекой1 VALUES (@tab_nomer, @data_vidachi, @data_priema, @Shifr)

13. Вставка в таблицу «Экземпляры»

CREATE PROCEDURE NewExzemplar

@ISBN varchar(20),

@otm_o_cpicanii varchar(20),

@otm_o_zamene varchar(20),

@predmet varchar(20),

@Nom_otd int,

@Shifr varchar(20)

AS

IF EXISTS (SELECT * FROM Экземпляр WHERE Шифр = @Shifr)

RETURN 0

IF EXISTS (SELECT * FROM Отделы WHERE Номер_отдела = @Nom_otd) AND EXISTS (SELECT * FROM Книга WHERE ISBN = @ISBN)

INSERT INTO Экземпляр VALUES (@ISBN, @otm_o_cpicanii, @otm_o_zamene, @predmet, @Nom_otd, @Shifr)

14. Обновление таблицы «Сотрудники_библиотеки»

CREATE PROCEDURE UpdateCotpyd

@Tab_nom int,

@Fam varchar(20)

AS

IF EXISTS (SELECT * FROM Сотрудники_библиотеки WHERE табельный_номер = @Tab_nom)

UPDATE Сотрудники_библиотеки SET фамилия=@Fam

WHERE табельный_номер = @Tab_nom

15. Вставка в таблицу «Сотрудники_библиотеки»

PROCEDURE NewSotrudnik

@Tab_nom int,

@Fam varchar(20),

@Name varchar(20),

@Sec_name varchar(20),

@data_rogd datetime,

@Dolgn varchar(20),

@Nom_otd int

AS

IF EXISTS (SELECT * FROM Сотрудники_библиотеки WHERE Табельный_номер = @Tab_nom)

RETURN 0

IF EXISTS (SELECT * FROM Отделы WHERE Номер_отдела = @Nom_otd)

INSERT INTO Сотрудники_библиотеки VALUES (@Tab_nom,@Fam, @Name, @Sec_name, @data_rogd, @Dolgn, @Nom_otd)

3.5 T-SQL-определения курсоров

1. Курсор для просмотра информации о студентах и выдача информации об их количестве.

DECLARE curs1 CURSOR

GLOBAL /*Создается глобальный курсор, который будет существовать до закрытия данного соединения*/

SCROLL /*Создает прокручиваемый курсор*/

KEYSET /*Будет создан ключевой курсор*/

TYPE_WARNING

FOR

SELECT /*Какие поля будут показаны в курсоре*/

Студенты. Читательский_номер, Студенты. Имя, Студенты. Фамилия, Студенты. Отчество, Студенты.год_поступления,

Студенты.год_окончания, Студенты.факультет, Студенты.специальность, Студенты.форма_обучения, Студенты.номер_приказа

FROM Студенты /*Из какой таблицы выбираются данные*/

FOR READ ONLY /*Только для чтения*/

open global curs1 /*открываем глобальный курсор*/

DECLARE /*объявляем переменную*/

@@Counter int

SET @@Counter =@@CURSOR_ROWS /*присваиваем ей число рядов курсора*/

Select @@Counter /*выводим результат на экран*/

CLOSE curs1 /*закрываем курсор*/

DEALLOCATE curs1 /*освобождаем курсор*/

2. Курсор для просмотра заказов и подсчета общего количества заказанных книг.

DECLARE curs2 CURSOR

GLOBAL SCROLL KEYSET

TYPE_WARNING /*Сервер будет информировать пользователя о неявном изменении типа курсора, если он несовместим с запросом SELECT*/

FOR

SELECT /*Что будет показано в курсоре*/

Преподаватели. Фамилия, Преподаватели. Имя, Преподаватели. Отчество, Книга. Автор, Книга. Название, Заказы. Количество, Книга. Цена

FROM Книга INNER JOIN (Преподаватели INNER JOIN Заказы ON Преподаватели. Читательский_номер = Заказы. Читательский_номер)

ON Книга.ISBN = Заказы.ISBN

FOR UPDATE /*Курсор для обновления*/

open global curs2

DECLARE

@@Fam varchar(20),

@@Name varchar(20),

@@Sec_name varchar(20),

@@Autor varchar(20),

@@Nazv varchar(20),

@@Kolvo int,

@@Cena int,

@@Counter int,

@@Var1 int

SET @@Counter = 1

SET @@Var1 = 0

WHILE @@COUNTER< @@CURSOR_ROWS /*Пока счетчик просмотренных строк меньше их общего числа*/

BEGIN

FETCH curs2 INTO @@Fam,@@Name,@@Sec_name,@@Autor,@@Nazv,@@Kolvo /*Просматриваем строки и значения*/

SET @@Counter =@@Counter +1 /*Меняем значение счетчика при переходе к другой строке*/

SET @@Var1=@@Var1+@@Kolvo *@@Cena /*Суммируем стоимости заказанных книг*/

END

Select @@Var1 /*выводим сумму на экран*/

CLOSE curs2

DEALLOCATE curs2

3. Удаление преподавателя.

DECLARE curs5 CURSOR

LOCAL SCROLL KEYSET

FOR SELECT Преподаватели.читательский_номер,

Преподаватели. Имя, Преподаватели. Отчество, Преподаватели. Фамилия, Преподаватели.должность

FROM Преподаватели

FOR UPDATE

open curs5

DECLARE

@@Chit_nom int,

@@Name varchar(20),

@@Sec_name varchar(20),

@@Fam varchar(20),

@@Dolgn varchar(20),

@@Counter int

SET @@Counter = 0

WHILE @@COUNTER< @@CURSOR_ROWS

BEGIN

DELETE curs5

SET @@Chit_nom=NULL

set @@Name=NULL

set @@Sec_name=NULL

SET @@Fam=NULL

SET @@Dolgn=NULL

WHERE CURRENT OF curs5

SET @@Counter =@@Counter +1

END

CLOSE curs5

3. Пользование студентов

DECLARE curs1 CURSOR

GLOBAL SCROLL KEYSET TYPE_WARNING

FOR

SELECT

Студенты. Читательский_номер, Студенты. Имя, Студенты. Фамилия, Студенты. Отчество, Студенты.год_поступления,

Студенты.год_окончания, Студенты.факультет, Студенты.специальность, Студенты.форма_обучения, Студенты.номер_приказа

FROM Студенты

FOR READ ONLY

open global curs1

DECLARE

@@Counter int

SET @@Counter =@@CURSOR_ROWS

Select @@Counter

CLOSE curs1

DEALLOCATE curs1

5. Информация о студентах и их количестве

DECLARE curs1 CURSOR

GLOBAL SCROLL KEYSET TYPE_WARNING

FOR

SELECT

Студенты. Читательский_номер, Студенты. Имя, Студенты. Фамилия, Студенты. Отчество, Студенты.год_поступления,

Студенты.год_окончания, Студенты.факультет, Студенты.специальность, Студенты.форма_обучения, Студенты.номер_приказа

FROM Студенты

FOR READ ONLY

open global curs1

DECLARE

@@Counter int

SET @@Counter =@@CURSOR_ROWS

Select @@Counter

CLOSE curs1

DEALLOCATE curs1

3.6 Описание клиентских приложений

При разработке клиентского приложения были созданы следующие формы.

При запуске приложения появляется форма «Регистрация» (рис. 13). на форме присутствует кнопк «Вход», нажатие на которую открывает другие формы. Код кнопки:

Private Sub Вход_Click()

Dim stDocName As String

Dim stLinkCriteria As String

If (Группа26. Value = 1 And Поле9. Value = «Директор») Then

DoCmd. OpenForm «Директор»

Поле9. Value = «»

ElseIf (Группа26. Value = 2 And Поле9. Value = «Библиотекарь») Then

DoCmd. OpenForm «Выбор»

Поле9. Value = «»

ElseIf (Группа26. Value = 3) Then

DoCmd. OpenForm «Поиск»

Поле9. Value = «»

Else: MsgBox «Неправильный пароль»

End If

End Sub

Рисунок 13 - Форма «Регистрация»

Для пользователя «Директор», открывается одноименная форма - рисунок 14. На ней присутствуют следующие кнопки: «Работа с сотрудниками библиотеки», «Информация о посетителях библиотеки», «Отчеты о работе библиотеки».

Рисунок 14 - Форма «Директор»

После нажатия на кнопку «Работа с сотрудниками библиотеки» появится форма «Работа с сотрудниками библиотеки» - рисунок 15. На форме присуетсвуют кнопки «Уволить сотрудника», «Информация о сотруднике», «Принять на работу сотрудника».

При нажатии кнопки «Уволить сотрудника», будет уволен выбранный сотрудник. Код обработки нажатия кнопки:

Private Sub Кнопка5_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСпискомі.SetFocus

strdate = ПолеСоСпискомі.Text

strSQL = «DELETE FROM dbo_Сотрудники_библиотеки WHERE табельный_номер=» + strdate

dbs. QueryDefs. Delete («my»)

Set qdf = dbs. CreateQueryDef («my», strSQL)

Set dbs = Nothing

При нажатии кнопки «Информация о сотруднике» - будет показан отчет, содеожащий информацию о библиотекаре. Код обработки нажатия кнопки:

Private Sub Кнопка6_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСпискомі.SetFocus

strdate = ПолеСоСпискомі.Text

strSQL = «SELECT dbo_Сотрудники_библиотеки. табельный_номер, dbo_Сотрудники_библиотеки. имя, dbo_Сотрудники_библиотеки. фамилия, dbo_Сотрудники_библиотеки. отчество, dbo_Сотрудники_библиотеки. дата_рождения, dbo_Сотрудники_библиотеки. должность, dbo_Сотрудники_библиотеки. Номер_отдела FROM dbo_Сотрудники_библиотеки WHERE табельный_номер=» + strdate

dbs. QueryDefs. Delete («my1»)

Set qdf = dbs. CreateQueryDef («my1», strSQL)

Set dbs = Nothing

DoCmd. OpenReport «my1», acPreview

Если нажать на кнопку «Принять на работу сотрудника», то откроется форма «dbo_Cотрудники_библиотеки», на которой необходимо будет внести информацию о новом сотруднике.

Если же на форме «Директор» нажать кнопку «Информация о посетителях библиотеки, то появится форма «Посетители» - рисунок 17, а если кнопку «Отчеты о работе библиотеки», то форма «Информация» - рисунок 18.

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

Private Sub Кнопка11_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As Integer, strdate As String

Set dbs = CurrentDb

If Группа0. Value = 1 Then

ПолеСоСписком16. SetFocus

strdate = ПолеСоСписком16. Text

strSQL = «SELECT dbo_Студенты. Читательский_номер, dbo_Студенты. Фамилия, dbo_Студенты. Имя, dbo_Студенты. Отчество, dbo_Студенты.год_поступления, dbo_Студенты.год_окончания, dbo_Студенты.факультет, dbo_Студенты.специальность, dbo_Студенты.факультет, dbo_Студенты.специальность, dbo_Студенты.форма_обучения, dbo_Студенты.номер_приказа FROM dbo_Студенты WHERE dbo_Студенты. Читательский_номер=» + strdate

dbs. QueryDefs. Delete («999»)

Set qdf = dbs. CreateQueryDef («999», strSQL)

Set dbs = Nothing

DoCmd. OpenReport «999», acPreview

End If

If Группа0. Value = 2 Then ПолеСоСписком18. SetFocus

strdate = ПолеСоСписком18. Text

strSQL = «SELECT dbo_Преподаватели. Читательский_номер, dbo_Преподаватели. Имя, dbo_Преподаватели. Отчество, dbo_Преподаватели. Фамилия, dbo_Преподаватели. Должность FROM dbo_Преподаватели WHERE dbo_Преподаватели. Читательский_номер=» + strdate

dbs. QueryDefs. Delete («333»)

Set qdf = dbs. CreateQueryDef («333», strSQL)

Set dbs = Nothing

DoCmd. OpenReport «333», acPreview

End If

End Sub

Если пользователь зарегистрировался как «Библиотекарь», то после формы «Регистрация» следующей появится форма «Выбор».

При нажатии на кнопку «Работа с фондом» появится форма «Фонд», на которой также после нажатия на соответствующую кнопку появятся следующие пользовательские формы:

- «dbo_Книга» при нажатии на кнопку «Обработка новых книг»;

- «Экземпляр» при нажатии на кнопку «Обработка новых экземпляров»;

- «Списанные_книги» при нажатии на кнопку «Списание книги»;

- «Замена_экземпляров» при нажатии на кнопку «Замена книг»;

На форме «dbo_Книга» присутствуют кнопки с изображением стрелок, которые служат для добавления новых записей в таблицу «Книга», а также кнопка «Добавить новый экземпляр», которая открывает форму «Экземпляр».

На форме «Экземпляр» расположены кнопки с изображением стрелок, которые служат для добавления новых записей в таблицу «Экземпляр», кнопка «Добавить новую книгу» для перехода на форму «dbo_Книга», и кнопка «Информация об экземплярах книг», нажатие на которую выводит список книг библиотеки.

На форме «dbo_списанные_книги» располагается кнопка с изображением стрелки, которая вызывает процедуру добавления записей в таблицу «Списанные книги», и кнопка «Информация о списанных книгах». Она предназначена для вызова хранимой процедуры, которая формирует отчет, содержащий информацию о книгах списанных по протоколу списания, номер которого вводится в поле рядом с кнопкой. Код обработки нажатия кнопки «Информация о списанных книгах»:

Private Sub Кнопка13_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As Integer

Dim strdate As String

Set dbs = CurrentDb

Поле23. SetFocus

strdate = Поле23. Text

strSQL = «SELECT dbo_Книга. Автор, dbo_Книга. Название, dbo_Списанные_книги. номер_протокола_списания, dbo_Сотрудники_библиотеки. фамилия, dbo_Списанные_книги. дата_списания FROM dbo_Сотрудники_библиотеки INNER JOIN ((dbo_Книга INNER JOIN dbo_Экземпляр ON dbo_Книга.ISBN = dbo_Экземпляр.ISBN) INNER JOIN dbo_Списанные_книги ON dbo_Экземпляр. Шифр = dbo_Списанные_книги. Шифр) ON dbo_Сотрудники_библиотеки. табельный_номер = dbo_Списанные_книги. Табельный_номер_списавшего WHERE dbo_Списанные_книги. номер_протокола_списания=» + strdate

dbs. QueryDefs. Delete («списание»)

Set qdf = dbs. CreateQueryDef («списание», strSQL)

DoCmd. OpenReport «списание», acPreview

Set dbs = Nothing

End Sub

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

Private Sub Просмотр _Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As Integer

Dim strdate As String

Set dbs = CurrentDb

Поле13. SetFocus

strdate = Поле13. Text

strSQL = «SELECT dbo_Книга. Автор, dbo_Книга. Название, dbo_Экземпляр. Шифр, dbo_Замена_экземпляров. Номер_акта_замены FROM (dbo_Экземпляр INNER JOIN dbo_Книга ON dbo_Экземпляр.ISBN = dbo_Книга.ISBN) INNER JOIN dbo_Замена_экземпляров ON dbo_Экземпляр. Шифр = dbo_Замена_экземпляров. Шифр WHERE (dbo_Замена_экземпляров. Номер_акта_замены)=» + strdate

dbs. QueryDefs. Delete («замена3»)

Set qdf = dbs. CreateQueryDef («замена3», strSQL)

DoCmd. OpenReport «замена3», acPreview

Set dbs = Nothing

End Sub

Если на форма «Выбор» была нажата кнопка «Работа с посетителями», то появится следующей форма «Работа с посетителями».

После нажатия на соответствующую кнопку на форме «Работа с посетителями» появятся следующие пользовательские формы:

- «Студенты» при нажатии на «Записать читателя в бибилитеку»;

- «dbo_Пользование_библиотекой2» при нажатии на «Выдать книги»;

- «Принять книги» при нажатии на «Принять книги».

- «dbo_Платные услуги» при нажатии на «Платные услуги».

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

На форме «dbo_Пользование_библиотекой2» располагается кнопка с изображением стрелки, которая вызывает стандартную процедуру добавления записей в таблицу «dbo_Пользование_библиотекой2».

На форме «Принять книги» располагается кнопка с изображением стрелки, которая вызывает стандартную процедуру добавления записей в таблицу «dbo_Пользование_библиотекой2».

На форме «dbo_Платные_услуги» располагается кнопка с изображением стрелки, которая вызывает процедуру добавления записей в таблицу «Платные_услуги», и две кнопки «Показать отчет». Они предназначена для вызова хранимой процедуры, которая формирует отчет, содержащий информацию о платных услугах библиотеки, которые были оказаны в отчетном месяце или году. Номер акта замены вводится в поле рядом с кнопкой. Код обработки нажатия кнопки «Показать_отчет» (за год):

Private Sub Кнопка53_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As Integer, strdate As String

Set dbs = CurrentDb

Поле29. SetFocus

strdate = Поле29. Text

'strdate = «» + strdat + «"»

strSQL = «SELECT dbo_Платные_услуги. табельный_номер, dbo_Платные_услуги. Сумма, dbo_Платные_услуги. читательский_номер, dbo_Платные_услуги. Дата_услуги FROM dbo_Платные_услуги WHERE Year (dbo_Платные_услуги. Дата_услуги)=» + strdate

dbs. QueryDefs. Delete («услуги»)

Set qdf = dbs. CreateQueryDef («услуги», strSQL)

DoCmd. OpenReport «услуги», acPreview

Set dbs = Nothing

End Sub

За месяц:

Private Sub Кнопка27_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As Integer

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСпискомІ5. SetFocus

strdate = ПолеСоСпискомІ5. Text

strSQL = «SELECT dbo_Платные_услуги. табельный_номер, dbo_Платные_услуги. Сумма, dbo_Платные_услуги. читательский_номер, dbo_Платные_услуги. Дата_услуги FROM dbo_Платные_услуги WHERE Month (dbo_Платные_услуги. Дата_услуги)=» + strdate

dbs. QueryDefs. Delete («услуги»)

Set qdf = dbs. CreateQueryDef («услуги», strSQL)

DoCmd. OpenReport «услуги», acPreview

Set dbs = Nothing

End Sub

Форма «Поиск» является общей для пользователя «Библиотекарь» и «Посетитель» и появляется соответственно либо при нажатии на форме «Выбор» кнопки «Поиск литературы» либо при входе пользователя с формы «Регтстрация». Если на ней выбрать кнопку «Поиск книг», то появится форма «Форма_поиска» (рисунок 32), а если кнопку - «Поиск перидических изданий», то форма «Поиск периодики» (рисунок 33).

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

Private Sub Кнопка13_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСписком11. SetFocus

strdat = ПолеСоСписком11. Text

strdate = «'» + strdat + «'»

strSQL = «SELECT dbo_Книга.ISBN, dbo_Книга. Автор, dbo_Книга. Название, dbo_Книга. Год_издания, dbo_Книга. Издательство, dbo_Книга. Кодичество_страниц, dbo_Книга. Цена, dbo_Экземпляр. Шифр, dbo_Экземпляр. Отметка_о_замене, dbo_Экземпляр. Отметка_о_списании FROM dbo_Книга INNER JOIN dbo_Экземпляр ON dbo_Книга.ISBN = dbo_Экземпляр.ISBN WHERE (dbo_Экземпляр. Шифр)=» + strdate

dbs. QueryDefs. Delete («поиск книги»)

Set qdf = dbs. CreateQueryDef («поиск книги», strSQL)

DoCmd. OpenReport «поиск книги», acPreview

Set dbs = Nothing

End Sub

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

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

Private Sub Кнопка10_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСписком8. SetFocus

strdat = ПолеСоСписком8. Text

strdate = «'» + strdat + «'»

strSQL = «SELECT dbo_Периодические_издания. Шифр_периодики, dbo_Периодические_издания. Название, dbo_Периодические_издания. Дата_издания, dbo_Периодические_издания. Номер_отдела FROM dbo_Периодические_издания WHERE (dbo_Периодические_издания. Шифр_периодики)=» + strdate

dbs. QueryDefs. Delete («шифр поиск период»)

Set qdf = dbs. CreateQueryDef («шифр поиск период», strSQL)

DoCmd. OpenReport «шифр поиск период», acPreview

Set dbs = Nothing

End Sub

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

Private Sub Кнопка29_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСпискомІ1. SetFocus

strdat = ПолеСоСпискомІ1. Text

strdate = «'» + strdat + «'»

stDocName = ChrW(100) & ChrW(98) & ChrW(111) & ChrW(95) & ChrW(1055) & ChrW(1077) & ChrW(1088) & ChrW(1080) & ChrW(1086) & ChrW(1076) & ChrW(1080) & ChrW(1095) & ChrW(1077) & ChrW(1089) & ChrW(1082) & ChrW(1080) & ChrW(1077) & ChrW(95) & ChrW(1080) & ChrW(1079) & ChrW(1076) & ChrW(1072) & ChrW(1085) & ChrW(1080) & ChrW(1103)

strSQL = «SELECT dbo_Периодические_издания. Шифр_периодики, dbo_Периодические_издания. Название, dbo_Периодические_издания. Дата_издания, dbo_Статьи. Номер_статьи, dbo_Статьи. Название, dbo_Статьи. Тема, dbo_Статьи. Предметная_область FROM dbo_Статьи INNER JOIN dbo_Периодические_издания ON dbo_Статьи. Шифр_периодики = dbo_Периодические_издания. Шифр_периодики WHERE dbo_Статьи. Номер_статьи=» + strdate

dbs. QueryDefs. Delete («Статьи»)

Set qdf = dbs. CreateQueryDef («Статьи», strSQL)

DoCmd. OpenReport «Статьи», acPreview

Set dbs = Nothing

End Sub

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

Private Sub Кнопка38_Click()

Dim stDocName As String

Dim dbs As Database, qdf As QueryDef, strSQL As String

Dim strdat As String

Dim strdate As String

Set dbs = CurrentDb

ПолеСоСпискомІ5. SetFocus

strdat = ПолеСоСпискомІ5. Text

If Переключатель36. Value = True Then

strdate = strdat +», %'»

strSQL = «SELECT dbo_Периодические_издания. Шифр_периодики, dbo_Периодические_издания. Название, dbo_Периодические_издания. Дата_издания, dbo_Статьи. Номер_статьи, dbo_Статьи. Название, dbo_Статьи. Тема, dbo_Статьи. Предметная_область FROM dbo_Статьи INNER JOIN dbo_Периодические_издания ON dbo_Статьи. Шифр_периодики = dbo_Периодические_издания. Шифр_периодики WHERE dbo_Статьи. Тема LIKE '%» + strdate

dbs. QueryDefs. Delete («Статьи»)

Set qdf = dbs. CreateQueryDef («Статьи», strSQL)

DoCmd. OpenReport «Статьи», acPreview

Set dbs = Nothing

Else

strdate = strdat + «%'»

strSQL = «SELECT dbo_Периодические_издания. Шифр_периодики, dbo_Периодические_издания. Название, dbo_Периодические_издания. Дата_издания, dbo_Статьи. Номер_статьи, dbo_Статьи. Название, dbo_Статьи. Тема, dbo_Статьи. Предметная_область FROM dbo_Статьи INNER JOIN dbo_Периодические_издания ON dbo_Статьи. Шифр_периодики = dbo_Периодические_издания. Шифр_периодики WHERE dbo_Статьи. Тема LIKE '%» + strdate

dbs. QueryDefs. Delete («Статьи»)

Set qdf = dbs. CreateQueryDef («Статьи», strSQL)

DoCmd. OpenReport «Статьи», acPreview

Set dbs = Nothing

End If

Exit_Кнопка38_Click:

End Sub

Последняя форма «dbo_Заказы» появляется при нажатии кнопки «Заказ литературы» на форме «Выбор». Кнопка с изображением стрелки на форме «dbo_Заказы» служит для добавления записей в таблицу «Заказы».

4. Проектирование системы безопасности. Управление авторизацией, управление ролями, управление разрешениями средствами Transact SQL

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

Чтобы пользовательское учетное имя получило доступ к БД, одного ввода имени пользователя и пароля недостаточно. Должно быть разрешение на исполнение SQL-выражений или на работу с объектами.

Назначение разрешений каждому пользователю в отдельности занимает много времени при сопровождении БД со средним и большим числом пользователей. Для облегчения операций по назначению разрешений пользователям SQL Server 2000 поддерживает роли SQL Server.

Роли создаются и сопровождаются в рамках SQL Server. Существует два типа ролей: стандартные и прикладные. Стандартным ролям (standard roles) назначаются привилегии, которые могут наследоваться пользователями, получающими членство в роли. Стандартные роли могут содержать все типы учетных имен: учетные записи пользователей и групп Windows, идентификаторы SQL Server и другие стандартные роли.

Для упрощения администрирования БД и самого сервера в SQL Server предусмотрен ряд стандартных предопределенных ролей. В основном их можно разделить на две категории: фиксированные роли на уровне сервера, или серверные роли (fixed server role), и фиксированные роли на уровне БД (fixed database role). Членство в фиксированных ролях на уровне сервера дает возможность администрирования сервера. Члены фиксированных ролей на уровне БД могут администрировать некоторые БД.

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

5. Прокомментированный скрипт создания базы данных

CREATE TABLE Заказы // Создание таблицы «Заказы»

(

Количество int NULL,

Дата_заказа datetime NULL,

Читательский_номер int NOT NULL,

ISBN varchar(20) NOT NULL

)

go

ALTER TABLE Заказы // Изменение таблицы «Заказы»

ADD PRIMARY KEY (Читательский_номер, ISBN)

go

CREATE TABLE Замена_экземпляров (

Номер_акта_замены int NULL,

Шифр varchar(20) NOT NULL

)

go

ALTER TABLE Замена_экземпляров // Изменение таблицы «Замена_экземпляров»

ADD PRIMARY KEY (Шифр)

go

CREATE TABLE Книга ( // Создание таблицы «Книга»

ISBN varchar(20) NOT NULL,

Автор varchar(20) NULL,

Название varchar(20) NULL,

Год_издания int NULL,

Издательство varchar(20) NULL,

Кодичество_страниц int NULL,

Цена int NULL

)

go

ALTER TABLE Книга // Изменение таблицы «Книга»

ADD PRIMARY KEY (ISBN)

go

CREATE TABLE Отделы ( // Создание таблицы «Отделы»

Номер_отдела int NOT NULL,

фамилия_начальника_отдела varchar(20) NULL,

Название_отдела varchar(20) NULL,

табельный_номер_начальника int NULL

)

go

ALTER TABLE Отделы // Изменение таблицы «Отделы»

ADD PRIMARY KEY (Номер_отдела)

go

CREATE TABLE Периодические_издания ( // Создание таблицы «Периодические_издания»

Шифр_периодики varchar(20) NOT NULL,

Название varchar(20) NULL,

Дата_издания datetime NULL,

Номер_отдела int NULL

)

go

ALTER TABLE Периодические_издания // Изменение таблицы «Периодические_издания»

ADD PRIMARY KEY (Шифр_периодики)

go

CREATE TABLE Пользование_библиотекой1 ( // Создание таблицы «Пользование_библиотекой1»


Подобные документы

  • Формулировка предметной задачи. Анализ требований к программе. Функциональная модель системы. Выбор языка и программных средств реализации. Описание логической модели базы данных. Концептуальная модель данных информационной системы Интернет-библиотеки.

    курсовая работа [4,4 M], добавлен 13.10.2017

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

    дипломная работа [1,5 M], добавлен 13.10.2015

  • Проектирование физической и логической моделей удаленной базы данных для АЗС. Разработка базы данных в СУБД Firebird с помощью утилиты IBExpert. Создание клиентского приложения для Windows с использованием клиент-серверной технологии в среде C++ Builder.

    курсовая работа [3,9 M], добавлен 18.01.2017

  • Общая характеристика инфологической модели информационной системы. Знакомство с особенностями проектирования базы данных "Библиотека", анализ основных этапов. Рассмотрение способов составления запросов по выборке информации из таблиц базы данных.

    контрольная работа [831,2 K], добавлен 08.12.2013

  • Анализ проектирования автоматизированной информационной системы компьютерного магазина "Джей". Разработка базы данных на языке Transact-SQL в системе управления базами данных Microsoft SQL Server 2000. Расчет себестоимости и цены программного продукта.

    курсовая работа [2,3 M], добавлен 16.08.2012

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

    курсовая работа [680,9 K], добавлен 19.10.2010

  • Анализ предметной области разрабатываемой информационной системы "Библиотека". Проектирование базы данных в среде MS Access. Физическая реализация данной информационной системы средствами Delphi 7 и MS Access 2003. Области применения технологии BDE.

    курсовая работа [2,4 M], добавлен 12.01.2016

  • Создание контекстной диаграммы информационной системы библиотеки. Основные компоненты и особенности ведения каталогов книг и читателей. Моделирование систем поиска и формирования заказов. Разработка диаграммы дерева узлов и логической модели базы данных.

    курсовая работа [1,1 M], добавлен 24.06.2013

  • Создание информационной системы товарооборота на основе использования технологий баз данных кирпичного завода. Физическая модель базы данных. Проектирование БД в СУБД Microsoft SQL Server. Схема функциональной структуры программной системы. Запросы к БД.

    курсовая работа [3,5 M], добавлен 05.03.2015

  • Анализ проектирования баз данных на примере построения программы ведения информационной системы картотеки ГИБДД. Основные функции базы данных. Обоснование выбора технологий проектирования и реализации базы данных. Описание информационного обеспечения.

    курсовая работа [753,0 K], добавлен 27.08.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.