Скачать .zip |
Реферат: Лабораторные работы (в ХГТУ)
Задание: Для модели базы данных, разработанной в первой самостоятельной работе [1], используя DataBase Desktop, дать описание системы соответствующих таблиц локальной базы данных в формате Paradox7.
Структура таблиц:
Таблица AVTOR:
Код автора (KOD)-ключевое, автоинкрементное поле;
Фамилия, имя, отчество (FIO)-строка до 50 символов, обязательного заполнения;
Год рождения (ROZD) – строка до 4 символов с маской “####”
Таблица CIKL:
Код цикла (KOD)-ключевое, автоинкрементное поле;
Название цикла (NAZV)- строка до 120 символов, обязательного заполнения;
Таблица DISCIP:
Код дисциплины (KOD)-ключевое, автоинкрементное поле;
Название дисциплины(NAZV)- строка до 120 символов, обязательного заполнения;
Код цикла (KCIKL) - содержит ссылку на таблицу подстановки CIKL, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Таблица GRUP:
Код группы (KOD)-ключевое, автоинкрементное поле;
Код специальности (KSP) - содержит ссылку на таблицу подстановки SPEC, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Название потока (POTOK) - строка до 20 символов, обязательного заполнения;
Год поступления (GOD) - строка до 4 символов с маской “####”, обязательного заполнения.
Таблица KNIGI:
Код книги (KOD)-ключевое, автоинкрементное поле;
Название книги (NAZV)- строка до 120 символов, обязательного заполнения;
Количество книг (KOLICH) – короткое целое типа SHORT;
Год издания (GOD) - строка до 4 символов с маской “####”, обязательного заполнения.
Таблица Recomend:
Код рекомендации (KOD)-ключевое, автоинкрементное поле;
На какой семестр рекомендация (SEMESTR) - короткое целое типа SHORT, обязательного заполнения;
Код книги (KKNIG) - содержит ссылку на таблицу подстановки KNIGI, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Код специальности (KSPEC) - содержит ссылку на таблицу подстановки SPEC, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Код дисциплины (KDISC) - содержит ссылку на таблицу подстановки DISCIP, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Таблица SOOTV:
Код соответствия (KOD)-ключевое, автоинкрементное поле;
Код книги (KKNIG) - содержит ссылку на таблицу подстановки KNIGI, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Код автора (KAVT) - содержит ссылку на таблицу подстановки AVTOR, по полю KOD, типа Long Integer (установлена ссылочная целостность);
Таблица SPEC:
Код специальности (KOD)-ключевое, автоинкрементное поле;
Название специальности (NAZV) - строка до 120 символов, обязательного заполнения;
Номер специальности (NOM) - строка до 10 символов, обязательного заполнения;
Министерство Образования Российской Федерации
Хабаровский Государственный Технический Университет
Кафедра: “Программного обеспечения ВТ и АС”
Лабораторная работа №2
Тема: “ Проектирование системы экранных
форм для ведения локальной базы данных ”
Выполнил:
студент группы ПО-02
Самойленко П.Р.
Проверил:
к.т.н., доцент
Саринков А.А.
Хабаровск 2002
Таблицы, используемы в экранных формах
Создадим систему экранных форм для работы со сложной связью между таблицами «Книги» и «Авторы». Данные таблицы связываются между собой с помощью третьей таблицы – «Соответствие». Таким образом, один автор может быть привязан к нескольким книгам, в написании которых он принимал участие. Связь между таблицами можно посмотреть на схеме данных.
Связь книга->автор
Вид формы на этапе проектирования:
Вид формы работающего приложения:
Содержимое левой таблицы меняется при изменения указателя в правой таблице. За это отвечает процедура:
procedure TSvaz.Table1AfterScroll(DataSet: TDataSet);
begin
query1.Close;
query1.Params[0].Value:=table1.FieldByName('KOD').AsInteger;
query1.Open;
end;
Например при переходе на следующую запись мы меняем значение параметра “par” у компонента Query1 на значение поля “KOD” текущей записи компонента table1.
Сам текст запроса Query1:
select *
from AVTOR
where kod in(
select kavt
from SOOTV
where kknig=:par )
Для навигации по названиям книг можно пользоваться компонентом «DBNavigator», который привязан к тому же набору что и DBGrid1(левая таблица). Для добавления и удаления автора надо пользоваться кнопками «Добавить» и «Удалить».
Процедура нажатия на кнопку «удалить»:
procedure TSvaz.BitBtn1Click(Sender: TObject);
begin
table2.FindKey([table1.fieldbyname('KOD').asinteger,query1.fieldbyname('KOD').asinteger]);
table2.Delete; // переход, удаление и обновление
Table1.AfterScroll(table1);
end;
Процедура нажатия на кнопку «добавить»:
procedure TSvaz.BitBtn3Click(Sender: TObject);
begin
table2.Append; // добавление записи в таблицу «Соответствие»
table2.FieldByName('KKNIG').Asinteger:=table1.fieldbyname('KOD').AsInteger; // в поле
//“KKNIG” поместить значение кода текущей книги
ShowWindow(Vibor_Avt.Handle, SW_SHOW); // показать форму выбора автора
Vibor_Avt.Show;
svaz.Enabled:=false; // заблокировать форму
end;
После выхода из формы выбора автора управление передается процедуре:
procedure TSvaz.vstavka;
begin
ifnot (TableProv.FindKey([table2.fieldbyname('KKnig').asinteger, table2.fieldbyname('KAvt'). asinteger])) thenbegin // поиск такой же записи как хотим ввести в уже введенных
try
Table2.post; // сохранение
table2.Close; // обновление
table2.Open;
except
messagedlg('Данный автор присутствует в списке',mtinformation,[mbok],0); // сюда никогда
//не перейдет
end;
end
elsebegin
table2.Cancel;
messagedlg('Данный автор присутствует в списке',mtinformation,[mbok],0);
end;
end;
Из-за ошибки в Delphi пришлось вставлять еще два компонента TableProv и DataProv – для того, чтоб сначала искать такую же запись в таблице соответствия, какую хотим ввести, и не задействовать уникальный индекс, построенный по полям Kknig и Kavt. Так как программа потом перестает работать. Вот вырезка из конференции:
Николаев Констанитн (04.12.01 20:54)
Уважаемые
специалисты!
Что
значит ошибка
"Index is out of date"?
С
уважением,
Константин.
Ю.Ю. (05.12.01 02:48)
Ошибка в индексном файле. Нужно удалить и создать заново.
kaif © (05.12.01 22:13)
Эта ошибка
существует
в D3,D4,D5. В D6 не проверял,
но уверен и там
она есть. Я пробовал
писать даже
на Borland Second Team по этому
поводу, но никто
меня слушать
даже не захотел
- отсылали на
форумы. Хотя
это чудовищный
баг, по моему
мнению. Ошибка
генерится по
следующему
алгоритму:
1.
Вставляете
запись в таблицу
Paradox, с нарушением
уникального
индекса. Неважно,
первичного
или вторичного.
Возникает
Key violation.
2. Делаете
невинный SQL-запрос
против этой
таблицы. Любой,
например,
SELECT * FROM