Задание:
Для модели
базы данных,
разработанной
в первой самостоятельной
работе [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('Данный
автор
присутствует
в
списке'
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
Слов: | 2918 |
Символов: | 19636 |
Размер: | 38.35 Кб. |