Задание:
Для модели
базы данных,
разработанной
в первой самостоятельной
работе [1], используя
DataBase
Desktop,
дать описание
системы соответствующих
таблиц локальной
базы данных
в формате Paradox7.
Структура
таблиц:
Таблица
AVTOR:
Код автора
(KOD)-ключевое,
автоинкрементное
поле;
Фамилия,
имя, отчество
(FIO)-строка
до 50 символов,
обязательного
заполнения;
Год рождения
(ROZD)
– строка до 4
символов с
маской “####”
Таблица
CIKL:
Код цикла
(KOD)-ключевое,
автоинкрементное
поле;
Название
цикла (NAZV)-
строка до 120
символов,
обязательного
заполнения;
Таблица
DISCIP:
Название
дисциплины(NAZV)-
строка до 120
символов,
обязательного
заполнения;
Код цикла
(KCIKL)
- содержит ссылку
на таблицу
подстановки
CIKL,
по полю KOD,
типа Long
Integer
(установлена
ссылочная
целостность);
Таблица
GRUP:
Код группы
(KOD)-ключевое,
автоинкрементное
поле;
Код
специальности
(KSP)
- содержит ссылку
на таблицу
подстановки
SPEC,
по полю KOD,
типа Long
Integer
(установлена
ссылочная
целостность);
Название
потока (POTOK)
- строка до 20
символов,
обязательного
заполнения;
Год
поступления
(GOD)
- строка до 4
символов с
маской “####”,
обязательного
заполнения.
Таблица
KNIGI:
Название
книги (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 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.
Процедура
zapr.
procedure
tsvaz.zapr;
var
i:integer;
begin
cislo:=0;
with
querysvod dobegin
Close;
parambyname('spec').Value:=table4.fieldbyname('KOD').AsInteger;
parambyname('dis').Value:=table5.fieldbyname('KOD').AsInteger;
Open;
AfterScroll(QuerySvod);
first;
for
i:=1 to
recordcount dobegin
cislo:=cislo+querySvod.fieldbyname('KOLICH').value;
label7.Caption:=floattostr(cislo);
next;
end;
end;
end;
Данная функция
задает значения
параметрам
компонента
querysvod,
который связан
с таблицей
«Книги».
Потом подсчитывается
количество
требуемых книг
и выводится
на поверхность
формы с помощью
компонента
Label7.
Сумма рассчитывается
последовательным
перебором
записей querysvod.
Также в теле
данной процедуры
вызывается
процедура
AfterScroll(QuerySvod):
procedure TSvaz.QuerySvodAfterScroll(DataSet: TDataSet);
begin
query1.Close;
query1.Params[0].Value:=querySvod.FieldByName('KOD').AsInteger;
query1.Open;
end;
Тут задается
значение параметру
компонента
query1
– для обновления
записей в таблице
«Список авторов».
SQL
запросы.
Текст запроса
компонента
querySvod:
select * from knigi
where kod in(
select KKnig from recomend
where kdisc=:dis and
kspec=:spec
)
order
by
NAZV
выбирает
из таблицы
knigi.db
все поля, где
значения kdisc
и kspec
– берутся из
верних таблиц.
Результаты
запроса отображаются
в таблице «Книги».
Текст запроса
компонента
Query1:
select *
from AVTOR
where kod in(
select kavt
from SOOTV
where kknig=:par )
order by FIO
через таблицу
SOOTV
идет связь книг
с авторами и
авторы данной
книги отображаются
в книге «Список
авторов».
Таким образом
в данной форме
отображаются
все данные,
которые были
в печатном
документе.
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую! |
Никита | 02:04:21 02 ноября 2021 | |
|
|
|
|
|
|
Смотреть все комментарии (22) Работы, похожие на Реферат: Лабораторные работы (в ХГТУ)
Назад |