- •664074, Иркутск, ул. Лермонтова, 83
- •2.3. Разработка концептуальной модели базы данных на основе
- •4.3. Диаграммы взаимодействия……………………………………………...39
- •5. Лабораторная работа 2…………………………………………………..…...41
- •7.1.Инспектор объектов (Object Inspector)…………………………………..49
- •7.2. Формы, модули и метод разработки «Two-Way Tools»……………….52
- •9. Лабораторная работа 3……………………………………………………….74
- •Пользователи
- •2. Проектирование логической структуры базы данных
- •2.1. Основные понятия реляционных баз данных
- •2.2. Разработка концептуальной модели базы данных на основе метода «Объект-Связь»
- •. Разработка концептуальной модели базы данных на основе метода функциональных зависимостей и ее нормализация
- •Разработка логической модели базы данных с помощью
- •Лабораторная работа 1
- •4. Разработка объектной модели задачи
- •4.1. Диаграммы сценариев
- •4.2. Диаграммы классов
- •4.3. Диаграммы взаимодействия
- •5. Лабораторная работа 2
- •6. Реляционная алгебра и язык sql
- •6.1. Основы реляционной алгебры
- •6.2. Язык sql
- •Настраиваемая cреда разработчика cBuilder
- •7.1.Инспектор объектов (Object Inspector)
- •7.2 Формы, модули и метод разработки «Two-Way Tools»
- •7.3. Палитра компонент
- •8. Разработка локального приложения баз данных
- •8.1. Создание файлов базы данных
- •8.2. Создание приложения и включение в его состав модуля данных
- •8.3.Размещение в модуле данных невизуальных компонент для доступа к бд и ее таблицам
- •Path путь к таблицам бд
- •8.4. Создание главной формы Главная форма будет содержать меню с пунктами, соответствующими выводу форм просмотра таблиц и форм вывода отчетов (выходных документов).
- •8.5. Создание форм просмотра и корректировки таблиц и размещение в них визуальных компонент
- •8.6. Разработка отчета для выдачи выходного документа
- •Выполнение запроса состоит в присвоении значения параметрам и повторном открытии запроса:
- •Лабораторная работа 3
- •Технология «клиент-сервер»
- •База данных
- •10.1. Серверная часть
- •10.2. Разработка клиентской части
- •Размещение в модуле данных невизуальных компонент для доступа к бд и ее таблицам. Разместим в модуле данных один экземпляр компоненты tibDatabase для связи с бд.
- •Разработка клиентского приложения в виде набора Web-страниц
- •11.1. Взаимодействие Internet-браузера с Web-сервером
- •11.2. Разработка html-страниц
- •Тег td. Предназначен для создания одной ячейки таблицы. Тег td должен размещаться внутри контейнера tr, который в свою очередь располагается внутри тега table.
- •11.3. Классы и пакеты классов Java
- •11.4. Обработка исключений
- •11.5. Теги jsp
- •11. 6. Сессия jsp
- •С ее помощью запросу делается доступной сессия и в ней создается 2 переменные. Следующая страница isses.Jsp
- •11. 7. Пакет java.Util в пакете java.Util сосредоточены контейнерные классы, то есть такие, которые содержат другие объекты.
- •Для добавления объекта в конец вектора существует метод addElement(добавляемый объект).
- •11. 8. Пакет sql
- •Метод executeQuery выполняет оператор sql (как правило, select) и возвращает набор данных – объект ResultSet
- •Метод executeUpdate выполняет один из операторов корректировки бд insert, update или delete
- •Метод getString возвращает значение указанного столбца текущей строки таблицы.
- •Курсовой проект
- •Варианты заданий
- •Учет товаров на складах и их потребности на торговых точках
- •Успеваемость студентов
- •Ремонт бытовой техники
- •Библиотека
- •Магазины
- •Конструктор
- •Учет наличия товара на складе
- •Отдел кадров
- •Учет выполнения лабораторных работ
- •Предприятие
- •Студенты
- •Изготовление деталей
- •Потребность в лекарствах
- •Подписка.
- •8. Сайт http://www.Citforum.Ru/database/osbd/contents.Shtml. Кузнецов с.Д. Основы современных баз данных, информационно-аналитические материалы центра информационных технологий .
10.2. Разработка клиентской части
В CBuilder6 имеются страницы компонент, связанных с разработкой приложений баз данных. Это страница BDE , компоненты которой используют программу Borland Database Engine (BDE) для доступа к базе данных, и страница InterBase, компоненты которой получают доступ к базе данных сервера InterBase напрямую, без использования BDE. Это обеспечивает более быструю и эффективную работу с БД, поэтому мы рассмотрим именно эти компоненты при освоении технологии разработки клиентского приложения.
Для начала работы по созданию клиентского приложения необходимо иметь БД на сервере в виде набора таблиц, генераторов, исключений, видов и хранимых процедур, записанных в файле с расширением gdb.
Ниже представлены этапы разработки клиентского приложения.
Вначале нужно создать новое приложение и включить в его состав так же, как и в локальном приложении, пустой модуль данных.
Размещение в модуле данных невизуальных компонент для доступа к бд и ее таблицам. Разместим в модуле данных один экземпляр компоненты tibDatabase для связи с бд.
У компоненты TIBDatabase следует установить следующие свойства:
Database Name – значение этого свойства – полное имя файла БД с расширением GDB.;
LoginPrompt - задание этого свойства равным false говорит о том, что в процессе разработки приложения при соединении с БД не будут запрашиваться имя пользователя и пароль;
Connected – признак, определяющий активна ли база данных. Его задают равным false, а в программе, в момент активизации главной формы, задают равным true. Также можно активизировать БД, вызвав метод компоненты Open, а в момент закрытия главной формы – метод компоненты Close;
DefaultTransaction – имя экземпляра компоненты TIBTransaction;
Name – имя компоненты TIBDatabase;
В свойстве Params через редактор следует задать строки:
user_name=SYSDBA
password=masterkey
lc_ctype=WIN1251 (для отображения символов русского алфавита).
Также в модуле данных необходимо поместить экземпляр компоненты TIBTransaction для выполнения транзакций. Ее свойство DefaultDatabase следует установить равным имени компоненты TIBDatabase, а свойство DefaultAction = taCommit (что означает, что все операции с БД будут подтверждаться)
В модуле данных будут размещаться экземпляры компоненты TIBDataSet для выполнения операторов SQL и связанные с ними экземпляры компоненты TDataSource.
Компонента TDataSource представляет собой промежуточное звено для связи невизуальной компоненты TIBDataSet с визуальными компонентами, размещаемыми на формах.
Компонента TIBDataSet имеет свойства:
Database - имя компоненты TIBDatabase, оно выбирается из списка доступных имен;
Transaction – имя компоненты TIBTransaction;
SelectSQL - свойство, в котором следует записать оператор SQL для выборки строк и столбцов БД;
DeleteSQL - свойство, в котором следует записать оператор SQL для удаления строк из БД;
InsertSQL - свойство, в котором следует записать оператор SQL для добавления строки к БД;
ModifySQL - свойство, в котором следует записать оператор SQL для изменения строк БД.
При проектировании каждого из последних четырех свойств появляется окно вида:
Последние четыре свойства могут вызывать хранимую процедуру для выполнения соответствующего вида корректировки и просмотра. Вызов процедуры корректировки выполняется с помощью оператора вида
execute procedure(имя :параметр1,:параметр2,…),
а процедуры просмотра - с помощью оператора вида
select * from имя (:параметр1,:параметр2,…) .
Имена параметров процедуры должны совпадать с именами полей таблиц, а порядок следования определяется порядком их появления в заголовке процедуры. Как уже говорилось, в процедуре добавления первичный ключ обязательно должен быть параметром, хотя он в процедуре, как правило, не используется – он генерируется.
Свойство Active компоненты TIBDataSet изначально равно false (набор данных не открыт); он будет открываться вызовом метода компоненты Open при показе соответствующей формы, а закрываться – вызовом метода компоненты Close при закрытии формы.
С каждой компонентой TIBDataSet должна быть связана компонента TDataSource, в свойстве DataSet которой нужно выбрать имя соответствующей компоненты TIBDataSet.
Для отображения на формах полей из нескольких связанных таблиц необходимо использовать свойство SelectSQL компоненты TIBDataSet. В нем, как уже говорилось, записывается оператор вызова процедуры. Например, для просмотра таблицы class, в которой желательно видеть названия классов и названия предметов, изучаемых в этом классе, свойство SelectSQL должно быть таким:
select * from class_s
Здесь class_s – процедура просмотра классов и связанных с ними предметов.
Для каждой компоненты TIBDataSet необходимо сделать доступными все поля. Для этого, сделав текущей нужную компоненту, следует нажать правую кнопку мыши, выбрать пункт контекстного меню Fields Editor.
П
оявится
окно:
Компонента TIBDataSet может обрабатываться методами для последовательной обработки НД.
Свойство EOF:Boolean; Проверка, достигнут ли конец НД
Методы:
First(); Установка указателя на первую запись НД;
Next(); Переход к следующей записи НД;
Last(); Установка указателя на последнюю запись НД.
bool Locate(константа – имя поля или полей, по которым идет поиск, поле или массив полей типа Variant со значениями полей, поле типа TLocateOptions с режимом поиска);Поиск в НД записи, поля которой совпадают с указанными значениями и установка ее в качестве текущей.
Кроме того, эта компонента имеет метод FieldByName, аргументом которого является строка с именем поля; метод возвращает значение поля для текущей записи.
Создание главной формы. Главная форма будет вызывать окно регистрации с выбором пользователя и указанием его пароля. Каждый пользователь должен иметь свое меню, которое определяется доступными ему функциями и получается из общего меню, содержащего пункты вывода форм просмотра таблиц и окон вывода отчетов (выходных документов). Для каждого пользователя те пункты меню, которые он не может выполнить, приобретают свойство Visible, равным false.
Для вызова формы регистрации необходимо в событии OnShow главной формы записать операторы
if (Login_Form->ShowModal()!=mrOk)
Close();
Далее должны быть операторы настройки меню в зависимости от введенного пользователя, то есть некоторые пункты меню должны быть доступны или недоступны для определенного пользователя (свойство Visible пункта меню может соответственно принимать значения true или false).
Форма регистрации будет иметь вид:
На этой форме размещаются два экземпляра компоненты TLabel (подсказки) и компонента TEdit (поле ввода имени пользователя) со страницы Standard, а также компонента TMaskEdit (ввод пароля, который скрыт от просмотра) со страницы Additional.
Последняя компонента отличается от TEdit возможностью контролировать введенное значение. В частности, чтобы пароль был не виден при просмотре, необходимо свойство PasswordChar задать равным символу * (или какому-либо другому символу).
Событие OnClick кнопки Регистрация должно содержать код:
char* szBuffer = new char[edPassword->Text.Length() + 11];
DM->IBDb->Close();
DM->IBDb->Params->Clear();//Очистка поля параметров
StrCopy(szBuffer, "PASSWORD=");
StrCat(szBuffer, edPassword->Text.c_str());
DM->IBDb->Params->Add(szBuffer);//Добавление параметра PASSWORD
StrCopy(szBuffer, "USER_NAME=");
StrCat(szBuffer, edUserName->Text.c_str());
DM->IBDb->Params->Add(szBuffer); //Добавление параметра USER_NAME
try
{ DM->IBDb->Open(); //Попытка открыть БД
ModalResult=mrOk; //Код возврата формы - норма
//Фрагменты для различных пользователей, в которых делаются доступны//ми и недоступными различные пункты меню
}
catch (const Exception &DbErr)//Обработка прерывания
{ModalResult=mrNone; //Код возврата формы – не норма
ShowMessage("Неверный пользователь или пароль");//Вывод сообщения
edUserName->Text="";
edUserName->SetFocus();//Установка фокуса на поле пользователя
};
Для вызова формы следует выполнить вызов метода этой формы ShowModal:
имя формы->ShowModal();
В событии OnShow следует выполнить открытие БД:
Имя модуля данных->имя компоненты TIBDatabase->Open();
В событии OnClose следует выполнить закрытие БД:
Имя модуля данных->имя компоненты TIBDatabase->Close();
Создание форм просмотра таблиц и размещение в них визуальных компонент. Будем придерживаться следующей технологии: из главной формы будем вызывать формы просмотра таблиц, а каждая такая форма будет вызывать форму корректировки (добавления и изменения) для соответствующей таблицы.
Формы просмотра будут содержать экземпляр компоненты DBGrid со страницы Data Controls и кнопки Добавить, Удалить, Заменить, Закрыть:
Свойство TDataSource компоненты DBGrid выбирается равным экземпляру компоненты TIBDataSet (для примера IB_CL), у которой свойство SelectSQL имеет вид:
select * from subject s,class c where s.ns=c.ns
С кнопкой Удалить свяжем действие:
DM->IB_CL->Delete(); //Удаление отмеченной строки таблицы
DM->IB_CL->Close();
//Закрытие НД – компоненты типа TIBDataSet
DM->IB_CL->Open();// Открытие НД
С событием OnClick кнопки Добавить свяжем действия, которые немного отличаются для каждого из двух случаев:
при редактировании одной таблицы не нужно выбирать поля из другой;
при редактировании одной таблицы нужно выбирать поля из другой.
В первом случае действия таковы:
DM->IB_PR->Open(); //Открытие таблицы
DM->IB_PR->Insert();//Первод НД в состояние Добавить
Edit_PR_Form->ShowModal();//Вызов процедуры редактирования
Во втором случае действия таковы:
DM->IB_CL->Open();//открытие редактируемой таблицы
DM->IB_PR->Open();//открытие просматриваемой таблицы-справочника
DM->IB_CL->Insert();
Edit_Cl_Form->ShowModal();
С событием OnClick кнопки Изменить также свяжем действия одного из двух видов аналогично кнопке Добавить, только НД переводится в состояние Edit. Кроме того, аналогично локальному приложению, происходит установка на нужную запись в таблицах.
Кнопки Добавить и Заменить вызывают форму редактирования с запоминанием режима (добавление или замена).
Создание форм для добавления и изменения данных. Форма редактирования должна содержать поля DBEdit, DBRadioGroup, TBCheckBox для отображения и редактирования полей разных типов и, возможно, компоненты TDBLookupComboBox - для выбора значений из связанной таблицы аналогично локальному приложению; только во всех случаях используются компоненты TDataSource, связанные с компонентами TIBDataSet.
Для нашего примера форма редактирования класса может выглядеть так:
Заполнение списка компоненты TDBLookupComboBox происходит аналогично локальному приложению, только данные берутся из компоненты TDataSource, связанной с компонентой TIBDataSet (для примера IB_CL).
Разработка отчета для выдачи выходного документа. Для примера создадим выходной документ со списком классов, в котором преподается выбранный предмет.
Пункт меню главной формы Вывод свяжем с новой формой Pre_Rep1_Form, на которой будем выбирать нужный предмет.
Поместим на эту форму экземпляр компоненты TDBLookupComboBox.
Компонента TDBLookupComboBox в данном случае предназначена для выбора значения из таблицы. В ней заполняются свойства:
ListSource - имя компоненты TDataSource, связанной с таблицей, из которой выбирается значение (в примере PR_DS);
ListField - имя отображаемого поля таблицы (в примере NAMEPRED);
KeyField - имя ключевого поля таблицы (в примере NP).
Выбранное значение ключа определяется значением свойства компоненты KeyValue, а выбранное значение отображаемого поля – свойством Text.
Создадим форму Rep1_Form для вывода отчета. Кнопку Ok предыдущей формы свяжем с вызовом метода Rep1_Form->QuickRep1->Preview() (отображение отчета на экране).
На форму с отчетом поместим экземпляр компоненты TIBDataSet для формирования НД выходного документа.
Свойство SelectSQL будет иметь вид:
select * from myquery(:anp)
myquery – хранимая процедура с текстом:
CREATE PROCEDURE MYQUERY (
PC INTEGER)
RETURNS (
PNAMCL VARCHAR(3),
PNAMPR VARCHAR(20),
PNCL INTEGER,
PNP INTEGER)
AS
begin
for select c.ncl,p.np,c.nameclass,p.namepred from class c, predmet p
where c.np=p.np and p.np=:pc into :pncl,:pnp,:Pnamcl,:pnampr
do suspend;
end
anp – параметр процедуры.
Формирование значения параметра происходит в вызывающей форме с помощью оператора вида
Rep1_Form->IBDataSet1->ParamByName(“anp”)->AsInteger=
DBLookUpComboBox1->KeyValue;
Поместим на эту форму экземпляр компоненты QuickRep со страницы QReport и через свойство DataSet свяжем ее с нужным запросом. При проектировании отчета соответствующий НД должен быть открыт (свойство Active установлено в True).
Компонента QuickRep имеет ряд свойств.
В данном случае отчет будет содержать:
заголовок страницы;
заголовки столбцов;
детальную информацию.
Другие отчеты могут содержать, как и в локальном приложении, группировку. Вставка разделов группировки производится точно так же, как в локальном приложении.
Для отображения в разделах отчета полей следует поместить на них экземпляры компонент QRLabel (статическое поле) с определением свойства Caption и QRDBText (поле НД). Для этой компоненты определяются свойства DataSet (имя компоненты TIBDataSet, формирующей НД, например, DM.CL_Chil) и DataField (имя поля НД, например, NAMECLASS).
Вместо компоненты QRDBText можно размещать компоненту QRExpr (выражение из полей НД) и определять его свойство Expression аналогично тому, как это описано для компоненты QRGroup.
В заключительной части группы можно размещать выражения, содержащие итоговые функции типа AVERAGE. SUM и т.д.
Для просмотра сформированного отчета во время проектирования необходимо при нахождении курсора мыши в области отчета нажать правую кнопку и выбрать пункт меню Preview. Это возможно в случае, если все части отчета формируются статически.
После размещения на форме отчета различных составляющих отчет примет вид, подобный примеру:
При запуске программы получим экран вида:
