РАЗРАБОТКА КЛИЕНТСКОЙ ЧАСТИ
6.1. Общее описание.
Код клиентской части состоит из 33 модулей, из них 24 – формы различного назначения и 9 – отчёты.
Клиентская часть связывается с серверной посредством механизма Borland Database Engine (BDE). Этот механизм предоставляет стандартные средства взаимодействия с различными серверами баз данных, и позволяет сделать клиентскую часть максимально независимой от выбранного сервера. Для связи с сервером InterBase выбран драйвер SQL-links, так как он обеспечивает большую производительность по сравнению с драйвером интерфейса ODBC (Open Database Connectivity). Кроме того, можно менять расположение базы данных без необходимости перекомпиляции клиентского приложения. Достаточно только изменить путь в свойствах псевдонима BDE. Соединение клиентской части с серверной может проходить по протоколам TCP/IP, SPX, NetBEUI.
Все компоненты приложения, работающие с данными, для удобства вынесены в отдельный модуль приложения (EntrDataModule). Его вид представлен на рис. 25.
Рис. 25. Модуль данных клиентской части.
Компонент dbEnterprises обеспечивает связь с удалённой базой данных. Остальные компоненты, работающие с данными, взаимодействуют с базой с помощью этого компонента.
Компоненты в модуле:
EnterprisesQuery - обеспечивает взаимодействие с таблицей «Предприятия»;
EntrModifyStoredProc, EntrDeleteStoredProc, EntrInsertStoredProc – обеспечивают модификацию данных в таблице «Предприятия», взаимодействуя с хранимыми процедурами на сервере;
– EnterprisesDataSource - обеспечивает интерфейс для вывода данных пользователю;
EcParamsQuery - обеспечивает взаимодействие с таблицей «Экономические параметры»;
EcParamsModifyStoredProc, EcParamsDeleteStoredProc, EcParamsInsertStoredProc – обеспечивают модификацию данных в таблице «Экономические параметры», взаимодействуя с хранимыми процедурами на сервере;
EcParamsDataSource - обеспечивает интерфейс для вывода данных пользователю;
MatBaseQuery - обеспечивает взаимодействие с таблицей «Материальная база»;
MatBaseModifyStoredProc, MatBaseDeleteStoredProc, MatBaseInsertStoredProc – обеспечивают модификацию данных в таблице «Материальная база», взаимодействуя с хранимыми процедурами на сервере;
MatBaseDataSource - обеспечивает интерфейс для вывода данных пользователю;
SecurityQuery - обеспечивает взаимодействие с таблицей «Режимы предприятия»;
SecurityModifyStoredProc, SecurityDeleteStoredProc, SecurityInsertStoredProc – обеспечивают модификацию данных в таблице «Режимы предприятия», взаимодействуя с хранимыми процедурами на сервере;
SecurityDataSource - обеспечивает интерфейс для вывода данных пользователю;
ArchiveQuery - обеспечивает взаимодействие с таблицей «Архив»;
ArchiveModifyStoredProc, ArchiveDeleteStoredProc, ArchiveInsertStoredProc – обеспечивают модификацию данных в таблице «Архив», взаимодействуя с хранимыми процедурами на сервере;
ArchiveDataSource - обеспечивает интерфейс для вывода данных пользователю;
IzdelieQuery - обеспечивает взаимодействие с таблицей «Изделия»;
IzdelieModifyStoredProc, IzdelieDeleteStoredProc, IzdelieInsertStoredProc – обеспечивают модификацию данных в таблице «Изделия», взаимодействуя с хранимыми процедурами на сервере;
IzdelieDataSource - обеспечивает интерфейс для вывода данных пользователю;
SizesQuery - обеспечивает взаимодействие с таблицей «Размеры»;
SizesModifyStoredProc, SizesDeleteStoredProc, SizesInsertStoredProc – обеспечивают модификацию данных в таблице «Размеры», взаимодействуя с хранимыми процедурами на сервере;
SizesDataSource - обеспечивает интерфейс для вывода данных пользователю;
ZakQuery - обеспечивает взаимодействие с таблицей «Заказчики»;
ZakModifyStoredProc, ZakDeleteStoredProc, ZakInsertStoredProc – обеспечивают модификацию данных в таблице «Заказчики», взаимодействуя с хранимыми процедурами на сервере;
ZakDataSource - обеспечивает интерфейс для вывода данных пользователю;
CheckEntrQuery – обеспечивает взаимодействие с хранимой процедурой проверки количества записей в таблицах, связанных с таблицей «Предприятия»;
CheckEntrDataSource - обеспечивает интерфейс для вывода данных пользователю;
CheckIzdQuery – обеспечивает взаимодействие с хранимой процедурой проверки количества записей в таблицах, связанных с таблицей «Изделия»;
CheckIzdDataSource - обеспечивает интерфейс для вывода данных пользователю;
В формах проекта содержатся лишь компоненты, необходимые для взаимодействия с пользователем.
В проекте содержатся следующие формы:
1) MainForm – главная форма приложения;
2) InputEntrForm – форма ввода данных для занесения их в таблицу «Предприятия»;
3) EntrViewForm – форма поиска и фильтрации в таблице «Предприятия»;
4) EcParamsForm – форма отображения данных таблицы «Экономические показатели»;
5) EcParamsInputForm – форма ввода данных для занесения их в таблицу «Экономические показатели»;
6) EcParamsViewForm – форма поиска в таблице «Экономические показатели»;
7) MatBaseForm – форма отображения данных таблицы «Материальная база»;
8) MatBaseInputForm – форма ввода данных для занесения их в таблицу «Материальная база»;
9) MatBaseViewForm – форма поиска в таблице «Материальная база»;
10) SecurityForm – форма отображения данных таблицы «Режимы предприятия»;
11) SecurityInputForm – форма ввода данных для занесения их в таблицу «Режимы предприятия»;
12) SecurityViewForm – форма поиска в таблице «Режимы предприятия»;
13) ArchiveForm – форма отображения данных таблицы «Архив заказов»;
14) ArchiveInputForm – форма ввода данных для занесения их в таблицу «Архив заказов»;
15) ArchiveViewForm – форма поиска в таблице «Архив заказов»;
16) IzdelieForm – форма отображения данных таблиц «Изделия», «Размеры» и «Заказчики»;
17) IzdelieInputForm – форма ввода данных для занесения их в таблицу «Изделия»;
18) IzdelieViewForm – форма поиска в таблице «Изделия»;
19) SizesInputForm – форма ввода данных для занесения их в таблицу «Размеры»;
20) SizeViewForm – форма поиска в таблице «Размеры»;
21) ZakInputForm – форма ввода данных для занесения их в таблицу «Заказчики»;
22) ZakViewForm – форма поиска в таблице «Заказчики»;
23) CheckForm – форма проверки базы знаний на полноту.
6.2. Типичные процедуры.
В программе функции добавления, удаления и изменения данных реализуются путём обращения к хранимым процедурам на сервере.
Пример обращения к процедуре добавления для таблицы «Предприятия»:
//Ввели ли название предприятия?
if NameEdit.Text<>'' then
begin
//Если да, то заносим информацию в базу
//Занесение параметров…
EntrDataModule.EntrInsertStoredProc.ParamByName('PNAME').AsString:=NameEdit.Text;
EntrDataModule.EntrInsertStoredProc.ParamByName('PADDRESS').AsString:=AddressEdit.Text;
EntrDataModule.EntrInsertStoredProc.ParamByName('PPHONE').AsString:=PhoneEdit.Text;
EntrDataModule.EntrInsertStoredProc.ParamByName('PCOMMENT').AsString:=CommentMemo.Text;
EntrDataModule.EntrInsertStoredProc.Prepare;//Подготовка данных
EntrDataModule.EntrInsertStoredProc.ExecProc;//Обращение к хранимой процедуре добавления
end
else
//Сообщение «Введите название предприятия».
MessageDlg('Введите название предприятия.',mtInformation,[mbOk],0);
Перед обращением к процедуре добавления производится проверка, введено ли название предприятия, и, если введено, то производится занесение параметров и обращение к хранимой процедуре, иначе выводится сообщение с просьбой ввести название предприятия. Как видно из текста процедуры, при добавлении передача ключа серверу не производится, он определяется сервером автоматически.
Пример обращения к процедуре удаления для таблицы «Предприятия»:
// Запрос на подтверждение удаления
if MessageDlg('Вы
уверены?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
//Если подтвердили, то удаляем.
EntrDataModule.EntrDeleteStoredProc.ParamByName('PENTKEY').AsString:=EntrDataModule.EnterprisesQuery.FieldValues['ENTKEY'];//Заносим параметр (ключ удаляемой записи)
EntrDataModule.EntrDeleteStoredProc.Prepare;//Подготовка параметра
EntrDataModule.EntrDeleteStoredProc.ExecProc;//Обращение к процедуре
RefreshEnterprisesTable;//После удаления обновляем информацию на экране
end;
При обращении к процедуре удаления сначала запрашивается подтверждение удаления, чтобы исключить случайное удаление.
Если пользователь подтвердил своё намерение, происходит обращение к соответствующей хранимой процедуре удаления на сервере, а затем информация на экране обновляется.
Пример процедуры проверки на полноту знаний в таблицах, связанных с таблицей «Предприятия»:
erez:=false;//Признак неполноты. Устанавливается в true, если нашли неполноту.
EntrDataModule.CheckEntrQuery.FindFirst;//Переходим на первую запись информации с сервера
repeat
j:=0;//Счётчик внутреннего цикла
repeat
if EntrDataModule.CheckEntrQuery.Fields[j].AsInteger=0 then
erez:=true;//Если нашли неполноту, устанавливаем признак.
inc(j);
until (j=EntrDataModule.CheckEntrQuery.FieldCount) or (erez=true);//Оканчиваем
просмотр, если //просмотрели всю строку или нашли неполноту
if erez=false then //Если неполнота не найдена, переходим к следующей строке
EntrDataModule.CheckEntrQuery.FindNext;
until (EntrDataModule.CheckEntrQuery.RecNo=EntrDataModule.CheckEntrQuery.RecordCount-1) or (erez=true);//Заканчиваем работу, если просмотрели всю таблицу или нашли неполноту.
На вход процедуры проверки полноты знаний поступает информация с сервера, представленная в виде таблицы, в каждой строке которой занесено количество записей, связанных с записью таблицы «Предприятия», номер которой соответствует номеру строки, в каждой из подчинённых таблиц. Если присутствует нулевое значение, то в данном случае это означает, что о предприятии не занесены какие-либо данные, например, производимые изделия, режимы, экономические показатели или показатели материальной базы. Поэтому каждое нулевое значение обозначает неполноту, которую необходимо устранить для того, чтобы модуль логического вывода мог делать адекватные заключения, обращаясь к этой базе знаний.
III. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ