Задание:
Для модели
базы данных,
разработанной
в первой самостоятельной
работе [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
Таблицы,
используемы
в экранных
формах
Создадим
систему экранных
форм для работы
со сложной
связью между
таблицами
«Книги» и «Авторы».
Данные таблицы
связываются
между собой
с помощью третьей
таблицы –
«Соответствие».
Таким образом,
один автор
может быть
привязан к
нескольким
книгам, в написании
которых он
принимал участие.
Связь между
таблицами можно
посмотреть
на схеме данных.
Связь книга->автор
Вид формы
на этапе проектирования:
Вид формы
работающего
приложения:
Содержимое
левой таблицы
меняется при
изменения
указателя в
правой таблице.
За это отвечает
процедура:
Например
при переходе
на следующую
запись мы меняем
значение параметра
“par”
у компонента
Query1
на значение
поля “KOD”
текущей записи
компонента
table1.
Сам текст
запроса Query1:
select
*
from
AVTOR
where
kod in(
select
kavt
from SOOTV
where
kknig=:par )
Для навигации
по названиям
книг можно
пользоваться
компонентом
«DBNavigator», который
привязан к тому
же набору что
и DBGrid1(левая
таблица). Для
добавления
и удаления
автора надо
пользоваться
кнопками «Добавить»
и «Удалить».
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)
Ошибка
в индексном
файле. Нужно
удалить и создать
заново.
Эта ошибка
существует
в D3,D4,D5. В D6 не проверял,
но уверен и там
она есть. Я пробовал
писать даже
на Borland Second Team по этому
поводу, но никто
меня слушать
даже не захотел
- отсылали на
форумы. Хотя
это чудовищный
баг, по моему
мнению. Ошибка
генерится по
следующему
алгоритму: 1.
Вставляете
запись в таблицу
Paradox, с нарушением
уникального
индекса. Неважно,
первичного
или вторичного.
Возникает
Key violation. 2. Делаете
невинный SQL-запрос
против этой
таблицы. Любой,
например,
SELECT * FROM
3. Вставляете
еще раз запись
с нарушением
уникального
индекса. сообщение
Key violation больше не
появляется. После
переоткрытия
таблицы будете
гарантированно
иметь "Index is out of date." Кто
не верит, могу
выслать исходный
код демонстрационной
программы . Из
за этого мне
пришлось выбирать
между Paradox и Local SQL. Выбор
был трудный.
И я выбрал
InterBase. Главная
подлость этой
ошибки в том,
что программист
не пытается
обычно создать
более 1 key violation подряд.
Этим обычно
занимается
пользователь.
Поэтому ошибка
плохо уловима
и иногда вылезает
через пару
месяцев работы
базы.
С описанной
ошибкой столкнулся
и я.
Форма
выбора автора
В
роли списка
выступает
компонент
DBLookupListBox, который
берет код из
таблицы авторов
и вставляет
его в таблицу
соответствия.
При закрытии
формы срабатывает
процедура
TSvaz.vstavka:
procedure
TVibor_Avt.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowWindow(Vibor_Avt.Handle,
SW_HIDE);
// скрыть форму,
но не закрывать
action:=canone;
svaz.Enabled:=true;
if
((svaz.Table2.State=dsInsert) or
(svaz.Table2.State=dsedit)) then
svaz.vstavka;
//
если мы добавляем
нового автора,
то перейти к
vstavka
svaz.Table1.AfterScroll(svaz.table1);
end;
При
нажатии на
кнопку «Добавить»
открывается
форма редактирования
списка авторов.
Форма
выбора автора
Эта
форма появляется
на экране либо
при нажатии
на кнопке «Авторы»
в меню главной
формы, либо при
нажатии на
кнопке «Добавить»
в форме, описанной
выше.
Форма
отображения
всех таблиц
В
этой форме
заголовки
столбцов в
таблицах показываются
«как есть», в
отличие от всех
предыдущих
форм, где заголовок
задавался на
этапе проектирования
– для удобства
и наглядности.
DBGrid’ы
связаны с наборами
данных, расположенными
на поверхности
формы DM,
которая имеет
тип DataModule.
Форма
DM.
Вид
формы на этапе
проектирования:
Формы
такого типа
не имеют визуальных
свойств и являются
контейнером
для не визуальных
компонентов.
Министерство
Образования
Российской
Федерации
Хабаровский
Государственный
Технический
Университет
Кафедра:
“Программного
обеспечения
ВТ и АС”
Лабораторная
работа №3
Тема:
“ Проектирование
экранной формы
электронного
аналога
исходного
документа ”
Выполнил:
студент
группы ПО-02
Самойленко
П.Р.
Проверил:
к.т.н., доцент
Саринков
А.А.
Хабаровск
2002
Вид формы
ввода
Для соединения
всех основных
таблиц воедино
используется
таблица SVOD.
Для установления
связи между
таблицами
используем
компоненты
TTable
и Tquery.
А точнее – их
свойства
MasterSource.
Вид формы
работающего
приложения:
В первых трех
таблицах выбирается
предмет и
специальность,
для которых
надо вывести
рекомендуемую
литературу.
Таблица «Предмет»
связана с таблицей
цикл «Цикл»
связью многие
к одному.
При смене
положения
указателя в
первых трех
таблицах запускается
процедура zapr
– для обновления
данных в таблицах
«Книги» и «Авторы
книг» через
компоненты
Query.
Данная функция
задает значения
параметрам
компонента
querysvod,
который связан
с таблицей
«Книги».
Потом подсчитывается
количество
требуемых книг
и выводится
на поверхность
формы с помощью
компонента
Label7.
Сумма рассчитывается
последовательным
перебором
записей querysvod.
Также в теле
данной процедуры
вызывается
процедура
AfterScroll(QuerySvod):