Автор работы: Пользователь скрыл имя, 22 Июня 2011 в 07:55, курсовая работа
Исходными данными являются:
данные о студенте (ФИО, группа);
данные о преподавателе (ФИО, должность);
данные о группах (наименование, староста, эдвайзер, год поступления);
сведения о специальностях (наименование, год введения);
данные о дисциплинах (наименования, кредиты, наличие курсовой работы).
Рисунок 8 - Окно IBConsole после создания генераторов.
Теперь присвоим нашему генератору начальное значение. Так как в таблице STUDENT уже есть записи, то нужно инициализировать генератор наибольшим имеющимся в базе значением поля kod_student. Посмотреть его можно, набрав в окне ISQL запрос
select MAX(kod_student) from STUDENT
В окне результатов появится примерно следующее:
MAX
===
4
Значение поля равно 4 так как мы вручную внесли уже четыре записи. По умолчанию у созданного генератора значение равно 0. Наберите и выполните запрос:
SET GENERATOR kod_student_gen TO 4
Теперь текущее значение генератора равно 4. Функция gen_id() увеличивает значение генератора на заданное число и возвращает полученное значение.
С помощью генератора kod_student_gen автоматизировано получение уникального числового значения для ключевого поля kod_student, однако при каждой вставке новой записи приходится вызывать функцию gen_id(kod_student_gen,1). Сервер позволяет автоматизировать и эту задачу c помощью механизма, который называется триггером.
Триггер - это некоторая процедура, обрабатываемая автоматически SQL-сервером при возникновении определенного события в базе данных - вставки, удаления и изменения записи. Непосредственно из программы к триггерам обратиться нельзя. Нельзя и передавать им входные параметры и получать от них значения выходных параметров. Триггеры всегда реализуют действие. Триггер связан с определенной таблицей базы и никогда не вызывается пользователем напрямую. Вместо этого он срабатывает (еще говорят - «стреляет») при попытке выполнить действие, заданное в его определении.
По событию изменения таблицы БД триггеры различаются на вызываемые при:
По отношению к событию, влекущему их вызов, триггеры различаются на:
При операциях вставки, удаления и изменения записи в теле триггера можно обращаться к значениям полей текущей записи при помощи специальных переменных NEW и OLD, например, узнать значение поля first_name при вставке записи можно, воспользовавшись выражением NEW.kod_student. Создадим для таблицы STUDENT триггер, который будет подставлять в поле kod_student очередное уникальное значение. Введите в окне ISQL и выполните следующий запрос:
SET TERM !! ;
CREATE TRIGGER kod_student_gen FOR STUDENT
BEFORE INSERT AS
BEGIN
new.kod_student=gen_
END !!
SET TERM ; !!
Этот
триггер будет срабатывать перед
вставкой записи в таблицу STUDENT, присваивая
полю kod_student уникальное значение, полученное
от генератора
kod_student_gen:
new.kod_student=gen_
Затем получим еще два генератора и два триггера для таблиц PREPODAVATEL и DISCIPLINA, чтобы автоматизировать вставку новых записей. Ниже представлены SQL коды для реализации этих задач:
Для таблицы PREPODAVATEL
CREATE GENERATOR kod_PREPOD_gen
select MAX(kod_PREPOD) from prepodavatel
SET GENERATOR kod_prepod_gen TO 1
SET TERM !! ;
CREATE TRIGGER kod_prepod_gen FOR PREPODAVATEL
BEFORE INSERT AS
BEGIN
new.kod_prepod=gen_
END !!
SET TERM ; !!
Для таблицы DISCIPLINA
CREATE GENERATOR kod_disciplina_gen
select MAX(kod_disciplina) from disciplina
SET GENERATOR kod_disciplina_gen TO 1
SET TERM !! ;
CREATE TRIGGER kod_disciplina_gen FOR DISCIPLINA
BEFORE INSERT AS
BEGIN
new.kod_disciplina=
END !!
SET TERM ; !!
3. РЕАЛИЗАЦИЯ БД
В СРЕДЕ ПРОГРАММИРОВАНИЯ
DELPHI
3.1. Формирование справочной системы
База
данных включает в себя 7 таблиц: Student,
Prepodavatel, Gruppa, Disciplina, Specialnost,
Uchebnii_plan и Vedomost.
Причем Student, Prepodavatel,
Gruppa, Disciplina, Specialnost
являются справочными для таблиц Uchebnii_plan
и Vedomost. Поэтому первоначально рассмотрим
автоматизацию работы данных таблиц. Данные
таблицы содержатся на одной форме на
компоненте PageControl1, на которой мы создаем
5 страниц, выбрав в контекстном меню PageControl1/New
page. В итоге мы получаем TabSheet1.Caption=Список
студентов, TabSheet2. Caption =Список групп, TabSheet3.
Caption =Список дисциплин, TabSheet4. Caption =Список
специальностей, TabSheet5. Caption =Список преподавателей.
Для соединения с базой данных поставим
на форму DataBase1, установив его свойства
AliasName=date_as, DatabaseName=date, Connected=true.
3.1.1. Формирование системы Gruppa
Перейдя на страницу Список групп расположим на ней Table1, Table2, 2 DataSource, 2 DbGrid, 3 кнопки Button, 4 текстовых поля Edit, 4 Label и 1 GroupBox. Затем установим для них свойства (см. рисунок 9):
Рисунок 9 - Страница «Список групп»
Соединяем Table1, Table2 с базой данных устанавливая свойство DatabaseName=date. А также для таблицы Table1 устанавливаем имя таблицы, из которой мы берем записи Tablename=Student, Datasource6 устанавливаем Table1. Для таблицы Table2 устанавливаем имя таблицы, из которой мы берем записи Tablename=Gruppa, Datasource2 устанавливаем Table2. Для того чтобы связать таблицы Table1 и Table2, таким образом чтобы установив в таблице Gruppa курсор на ту или иную группу в таблице Student выводились только те записи, которые соответствуют данной группе. Для этого установим у Table1 Student свойства: Mastersource=Datasource2, MasterFields=gruppa (смотреть рисунок), IndexFieldName=gruppa.
Для
того чтобы внести новую группу необходимо
внести значения Группу, Год поступления
и Эдвайзера в соответствующие Edit4, Edit5,
Edit6, затем нажать кнопку «Вставить», ниже
представлен обработчик OnClick:
Рисунок
10 - Процесс соединения MasterFields для таблиц
procedure TForm1.Button8Click(Sender: TObject);
begin
table2.Insert;
Table2.Fields[0].
Table2.Fields[1].
Table2.Fields[2].
Table2.Post;
edit4.Clear;
edit5.Clear;
edit6.clear;
end;
Для удаления записи из таблицы, воспользуемся кнопкой «Удалить», вставив в обработчик события OnClick следующую строчку:
table2.Delete;, которая удалит сведения о группе, на которой стоит курсор.
Также возможен поиск по группе. Для этого нам необходимо ввести название группы которую необходимо найти и нажать кнопку «Поиск». Код данной процедуры:
procedure TForm1.Button13Click(Sender: TObject);
begin
Table2.SetKey;
Table2.Fields[0].
Table2.GotoKey;
edit7.Clear;
end;
Итак
мы автоматизировали работу с записями
о группах, которая позволяет нам работать
с сведениями о группах, а также просматривать
список студентов выбранной группы.
3.1.2. Формирование системы Student
Перейдя на страницу Список студентов расположим на ней Query4, DataSource1, DbGrid, 2 кнопки Button,2 текстовых поля Edit, 2 Label и 4 SpeedButton. Затем установим для них свойства (см. рисунок 11).
Соединить Query с базой данных, установив DatabaseName=date и записав в SQL: select fio, gruppa from student. Установить у DataSource1 Dataset=Query4, чтобы он хранил набор данных Query, а для Dbrid установить DataSource1, чтобы в таблице мы могли увидеть результат запроса. 4 SpeedButton необходимы нам для перемещения по записям в таблице переходя: на следующую запись, первую, последнюю и предыдущую. Для этого мы запишем в обработчик событий для каждой из кнопок соответствующую строчку:
query4.Next;//следующая;
query4.First;//первая;
query4.Last;//последняя;
query4.Prior;//предыдущая.
Для того
чтобы внести в таблицу соответствующее
значение запишем для кнопки «Вставить»
соответствующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
query4.Insert;
query4.FieldByName('FIO'
query4.FieldByName('
query4.Post;
edit2.Clear;
edit3.Clear;
end;
Рисунок
11 - Страница «Список студентов»
Для удаления записи из таблицы, воспользуемся кнопкой «Удалить», вставив в обработчик события OnClick следующую строчку:
query4.Delete;
Т.к.
удаление записи является безвозвратной,
то необходимо для query4 записать событие:
procedure
TForm1.Query4BeforeDelete(
begin
if not (MessageDlg('Вы действительно хотите удалить запись?',
mtError, [mbYes, mbNo], 0)=mrYes) then
begin
Abort;
end;
end;
Итак мы автоматизировали работу с таблицей Student, которая позволяет работать с записями. На рисунке представлена форма в откомпилированном виде:
Рисунок
12 - Процесс удаления студента из списка
3.1.3. Формирование системы Disciplina
Перейдя на страницу Список дисциплин расположим на ней Query1, DataSource 3, 1 DbGrid, 2 кнопки Button, 2 текстовых поля Edit, 2 Label. Затем установим для них свойства (см. рисунок 13):
Рисунок 13 - Страница «Список дисциплин»