Смекни!
smekni.com

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

Задание: Для моделибазы данных,разработаннойв первой самостоятельнойработе [1], используя DataBaseDesktop,дать описаниесистемы соответствующихтаблиц локальнойбазы данных в формате Paradox7.


Структуратаблиц:


ТаблицаAVTOR:

  • Код автора(KOD)-ключевое,автоинкрементноеполе;

  • Фамилия,имя, отчество(FIO)-строкадо 50 символов,обязательногозаполнения;

  • Год рождения(ROZD)– строка до 4символов смаской “####”


ТаблицаCIKL:

  • Код цикла(KOD)-ключевое,автоинкрементноеполе;

  • Названиецикла (NAZV)-строка до 120символов,обязательногозаполнения;


ТаблицаDISCIP:

  • Коддисциплины(KOD)-ключевое,автоинкрементноеполе;

  • Названиедисциплины(NAZV)-строка до 120символов,обязательногозаполнения;

  • Код цикла(KCIKL)- содержит ссылкуна таблицуподстановкиCIKL,по полю KOD,типа LongInteger(установленассылочнаяцелостность);


ТаблицаGRUP:

  • Код группы(KOD)-ключевое,автоинкрементноеполе;

  • Кодспециальности(KSP)- содержит ссылкуна таблицуподстановкиSPEC,по полю KOD,типа LongInteger(установленассылочнаяцелостность);

  • Названиепотока (POTOK)- строка до 20символов,обязательногозаполнения;

  • Годпоступления(GOD)- строка до 4символов смаской “####”,обязательногозаполнения.


ТаблицаKNIGI:

  • Код книги(KOD)-ключевое,автоинкрементноеполе;

  • Названиекниги (NAZV)-строка до 120символов,обязательногозаполнения;

  • Количествокниг (KOLICH)– короткоецелое типаSHORT;

  • Год издания(GOD)- строка до 4символов смаской “####”,обязательногозаполнения.


ТаблицаRecomend:

  • Кодрекомендации(KOD)-ключевое,автоинкрементноеполе;

  • На какойсеместр рекомендация(SEMESTR)- короткое целоетипа SHORT,обязательногозаполнения;

  • Код книги(KKNIG)- содержит ссылкуна таблицуподстановкиKNIGI,по полю KOD,типа LongInteger(установленассылочнаяцелостность);

  • Кодспециальности(KSPEC)- содержит ссылкуна таблицуподстановкиSPEC,по полю KOD,типа LongInteger(установленассылочнаяцелостность);

  • Коддисциплины(KDISC)- содержит ссылкуна таблицуподстановкиDISCIP,по полю KOD,типа LongInteger(установленассылочнаяцелостность);


ТаблицаSOOTV:

  • Кодсоответствия(KOD)-ключевое,автоинкрементноеполе;

  • Код книги(KKNIG)- содержит ссылкуна таблицуподстановкиKNIGI,по полю KOD,типа LongInteger(установленассылочнаяцелостность);

  • Код автора(KAVT)- содержит ссылкуна таблицуподстановкиAVTOR,по полю KOD,типа LongInteger(установленассылочнаяцелостность);


ТаблицаSPEC:

  • Кодспециальности(KOD)-ключевое,автоинкрементноеполе;

  • Названиеспециальности(NAZV)- строка до 120символов,обязательногозаполнения;

  • Номерспециальности(NOM)- строка до 10символов,обязательногозаполнения;


МинистерствоОбразованияРоссийскойФедерации
ХабаровскийГосударственныйТехническийУниверситет

Кафедра:“ПрограммногообеспеченияВТ и АС”



Лабораторнаяработа №2


Тема:“ Проектированиесистемы экранных

форм дляведения локальнойбазы данных”


Выполнил:

студентгруппы ПО-02

СамойленкоП.Р.

Проверил:

к.т.н., доцент

СаринковА.А.


Хабаровск2002



Таблицы,используемыв экранныхформах

Создадимсистему экранныхформ для работысо сложнойсвязью междутаблицами«Книги» и «Авторы».Данные таблицысвязываютсямежду собойс помощью третьейтаблицы –«Соответствие».Таким образом,один авторможет бытьпривязан кнесколькимкнигам, в написаниикоторых онпринимал участие.Связь междутаблицами можнопосмотретьна схеме данных.


Связь книга->автор

Вид формына этапе проектирования:


Вид формыработающегоприложения:


Содержимоелевой таблицыменяется приизмененияуказателя вправой таблице.За это отвечаетпроцедура:

procedureTSvaz.Table1AfterScroll(DataSet: TDataSet);

begin

query1.Close;

query1.Params[0].Value:=table1.FieldByName('KOD').AsInteger;

query1.Open;

end;

Напримерпри переходена следующуюзапись мы меняемзначение параметра“par”у компонентаQuery1на значениеполя “KOD”текущей записикомпонентаtable1.

Сам текстзапроса Query1:

select*

fromAVTOR

wherekod in(

selectkavt

from SOOTV

wherekknig=:par )


Для навигациипо названиямкниг можнопользоватьсякомпонентом«DBNavigator», которыйпривязан к томуже набору чтои DBGrid1(леваятаблица). Длядобавленияи удаленияавтора надопользоватьсякнопками «Добавить»и «Удалить».

Процедуранажатия накнопку «удалить»:

procedureTSvaz.BitBtn1Click(Sender: TObject);

begin

table2.FindKey([table1.fieldbyname('KOD').asinteger,query1.fieldbyname('KOD').asinteger]);

table2.Delete; // переход, удалениеи обновление

Table1.AfterScroll(table1);

end;

Процедуранажатия накнопку «добавить»:

procedureTSvaz.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;

После выходаиз формы выбораавтора управлениепередаетсяпроцедуре:

procedureTSvaz.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.0120:54)

Уважаемыеспециалисты!
Чтозначит ошибка"Index is out of date"?
Суважением,
Константин.

Ю.Ю.   (05.12.0102:48)

Ошибкав индексномфайле. Нужноудалить и создатьзаново.

kaif©  (05.12.0122: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:

procedureTVibor_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)) thensvaz.vstavka;

//если мы добавляемнового автора,то перейти кvstavka

svaz.Table1.AfterScroll(svaz.table1);

end;

Принажатии накнопку «Добавить»открываетсяформа редактированиясписка авторов.


Формавыбора автора

Этаформа появляетсяна экране либопри нажатиина кнопке «Авторы»в меню главнойформы, либо принажатии накнопке «Добавить»в форме, описаннойвыше.


Формаотображениявсех таблиц


Вэтой формезаголовкистолбцов втаблицах показываются«как есть», вотличие от всехпредыдущихформ, где заголовокзадавался наэтапе проектирования– для удобстваи наглядности.DBGrid’ысвязаны с наборамиданных, расположеннымина поверхностиформы DM,которая имееттип DataModule.


ФормаDM.

Видформы на этапепроектирования:


Формытакого типане имеют визуальныхсвойств и являютсяконтейнеромдля не визуальныхкомпонентов.


МинистерствоОбразованияРоссийскойФедерации
ХабаровскийГосударственныйТехническийУниверситет

Кафедра:“ПрограммногообеспеченияВТ и АС”



Лабораторнаяработа №3


Тема:“ Проектированиеэкранной формыэлектронного

аналогаисходногодокумента ”


Выполнил:

студентгруппы ПО-02

СамойленкоП.Р.

Проверил:

к.т.н., доцент

СаринковА.А.


Хабаровск2002



Вид формыввода

Для соединениявсех основныхтаблиц воединоиспользуетсятаблица SVOD.Для установлениясвязи междутаблицамииспользуемкомпонентыTTableи Tquery.А точнее – ихсвойстваMasterSource.

Вид формыработающегоприложения:


В первых трехтаблицах выбираетсяпредмет испециальность,для которыхнадо вывестирекомендуемуюлитературу.Таблица «Предмет»связана с таблицейцикл «Цикл»связью многиек одному.

При сменеположенияуказателя впервых трехтаблицах запускаетсяпроцедура zapr– для обновленияданных в таблицах«Книги» и «Авторыкниг» черезкомпонентыQuery.

Процедураzapr.

proceduretsvaz.zapr;

var

i:integer;

begin

cislo:=0;

withquerysvod dobegin

Close;

parambyname('spec').Value:=table4.fieldbyname('KOD').AsInteger;

parambyname('dis').Value:=table5.fieldbyname('KOD').AsInteger;

Open;

AfterScroll(QuerySvod);

first;

fori:=1 torecordcount 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 andkspec=:spec

)

orderbyNAZV

выбираетиз таблицыknigi.dbвсе поля, гдезначения kdiscи kspec– берутся изверних таблиц.Результатызапроса отображаютсяв таблице «Книги».

Текст запросакомпонентаQuery1:

select *

from AVTOR

where kod in(

select kavt

from SOOTV

where kknig=:par )

order by FIO

через таблицуSOOTVидет связь книгс авторами иавторы даннойкниги отображаютсяв книге «Списокавторов».


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