РефератыИнформатика, программированиеЛаЛабораторные работы (в ХГТУ)

Лабораторные работы (в ХГТУ)

Задание:
Для модели
базы данных,
разработанной
в первой самостоятельной
работе [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

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
идет связь книг
с авторами и
авторы данной
книги отображаются
в книге «Список
авторов».


Таким образом
в данной форме
отображаются
все данные,
которые были
в печатном
документе.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Лабораторные работы (в ХГТУ)

Слов:2918
Символов:19636
Размер:38.35 Кб.