Lab2 (663923)
Текст из файла
Министерство Образования Российской Федерации
Хабаровский Государственный Технический Университет
Кафедра: “Программного обеспечения ВТ и АС”
Лабораторная работа №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
if not (TableProv.FindKey([table2.fieldbyname('KKnig').asinteger, table2.fieldbyname('KAvt'). asinteger])) then begin // поиск такой же записи как хотим ввести в уже введенных
try
Table2.post; // сохранение
table2.Close; // обновление
table2.Open;
except
messagedlg('Данный автор присутствует в списке',mtinformation,[mbok],0); // сюда никогда
//не перейдет
end;
end
else begin
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
С описанной ошибкой столкнулся и я.
Форма выбора автора
В роли списка выступает компонент 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.
Вид формы на этапе проектирования:
Формы такого типа не имеют визуальных свойств и являются контейнером для не визуальных компонентов.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.