Диплом: Разработка подсистемы управления заказами корпоративной информационной системы (на примере ООО "Макс-фарма")

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
53
данных (TADOQuery) через свойство DataSet у источников данных.
Для отображения содержимого наборов данных на форме были
размещены такие компоненты как таблица cxGrid (с вкладки Dev Express),
стандартные компоненты DBEdit, DBNavigator
Связанные через свойство DataSource с соответствующими источниками
данных. А также, для компонентов DBEdit через свойство DataField – с
соответствующими полями таблиц БД.
Для отражения полей данных, которые будут отражаться при выполнении
приложения, в свойства таблицы (cxGrid) были добавлены нужные поля, нажав
на кнопку «Retrieve Fields» (Рис. 3.13)
базы данный информационный
Рис.3.13 Добавление полей в таблице
В базе данных присутствует фильтр, компонент RadioGroup с двумя
переключателями (все, по содержанию) Этот фильтр-переключатель будет
давать возможность отображать (запрашивать из БД), или:
- все записи из таблицы заказ, цена базы данных,
- только те, которые будут соответствовать выбранной пользователем
строке в таблице заказчик на экранной форме.
Используемый код фильтра.
54
Рис. 3.14 Код фильтра
Чтобы иметь возможность добавлять изображения в формате BMP в Базу
данных было размещено на форме компонент OpenPictureDialog (рисунок 3.15).
Рис. 3.15 Форма компонент OpenPictureDialog
Для удобства в последствии выбора BMP-файлов в свойстве Filter этого
компонента установили фильтр на выбор файлов.
Далее, был создан обработчик на событие OnClick у кнопки Button и
вписан следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
with DM do begin
if dlgOpenPic1.Execute then begin
if not (T1.State in [dsInsert,dsEdit]) then
T1.Edit;
//cxgrdbclmnGrid1DBTableView1photo.LoadFromFile(dlgOpenPic1.FileName);
end;
55
end;
end;
Стандартным компонентом для управления записями БД через Delphi-
приложение служит компонент DBNavigator с закладки Data Controls (Рисунок
3.16)
Рис. 3.16 Компонент DBNavigator
Связав его с источником данных (DataSource) через свойство DataSource
становится возможным добавлять, отменять добавление и изменение, удалять,
сохранять записи в БД
Но чтобы разобраться в логике работы компонента был рассмотрен
другой способ управления записями БД при помощи создания отдельных
обработчиков событий OnClick, выполняемых, например, при нажатии на
соответствующие кнопки на форме
Обработчик события OnClick, выполняемый при нажатии на кнопку
«Добавить» (это еще не сохранение записи в базу данных)
with DM do begin
if zakazchik.State=dsBrowse then begin
zakazchik.Append;
DBEdit1.SetFocus;
end;
end;
Обработчик события OnClick, выполняемый при нажатии на кнопку
«Сохранить»
56
with DM do begin
if zakazchik.State in [dsInsert,dsEdit] then
zakazchik.Post;
end;
Бывает, что при сохранении информации в БД возникают ошибки,
например, обязательное поле не заполнено, или БД доступна только для чтения.
Действия по исправлению ошибок, выдаче окон-комментариев и пр. можно
предусмотреть в обработчике события OnPostError у набора данных,
предварительно подключив модули Controls и Dialogs.
MessageDlg('Ошибка. Проверьте поля кодзаказчика и кодцены',
mtError,[mbOK],0);
if MessageDlg('Отменить изменения?',
mtConfirmation,[mbYes,mbNo],0)=mrYes
then zakazchik.Cancel
else Form1.DBEdit1.SetFocus;
Обработчик события OnClick, выполняемый при нажатии на кнопку
«Отменить».
with DM do begin
if zakazchik.State in [dsInsert,dsEdit] then
zakazchik.Cancel;
end;
Метод Cancel набора данных отменяет внесенные изменения, не
сохраненные пока в БД
Обработчик события OnClick, выполняемый при нажатии на кнопку
«Удалить».
with DM do begin
if zakazchik.State=dsBrowse then
if MessageDlg('Удалить запись?'+#10#13+
'При этом соответствующие записи в '+
'подчиненных таблицах средствами СУБД будут удалены! ',
57
mtConfirmation,[mbYes,mbNo],0)=mrYes then
zakazchik.Delete;
end;
Метод Delete набора данных удаляет выбранную запись из БД. Удаление
в данном обработчике произойдет только при ответе «Yes» в появившемся окне
диалога. При этом средствами СУБД возможно каскадное удаление записей в
подчиненных таблицах. (рисунок 3.17)
Рис. 3.17 Удаление устаревших заказов
Для удобства использования базы данных был использован механизм
транзакций
Транзакция представляет собой отдельную последовательность операций,
обычно выполняемую для нескольких таблиц БД (нескольких наборов данных).
Транзакция после своего завершения переводит БД из одного целостного
непротиворечивого состояния в другое.
С целью выполнения в разрабатываемом приложении инструкций
(операторов) языка T–SQL для обработки транзакций был размещен компонент
ADOQuery (с вкладки ADO) на модуле данных и переименован в TRAN.
Создан обработчик события BeforePost для набора данных Цена, который
будет срабатывать непосредственно перед сохранением записи в Заказ (как
новой записи, так и уже существующей исправленной записи)
Код обработчика :
58
procedure TDM.beforpost(DataSet: TDataSet);
begin
if DM.zakaz.State=dsInsert then
Dobavit_v_cenu:=true;
TRAN.SQL.Clear;
TRAN.SQL.Add('BEGIN TRAN');
TRAN.ExecSQL;
end;
Приведенный программный код в случае добавления в ЗАКАЗ именно
новой записи установит для глобальной переменной Dobavit_v_cenu значение
True, чтобы при срабатывании следом события AfterPost автоматически бы
добавилась и сохранилась запись в Цена. В противном случае, если
Dovabit_v_cenu=false, что говорит о том, что была исправлена уже
существующая запись в ЗАКАЗ, то автоматически добавляться новая запись в
Цена не будет.
Создан обработчик события AfterPost для набора данных ЗАКАЗ,
который сработает сразу после сохранения текущей записи набора данных
ЗАКАЗ.
Код обработчика
procedure TDM.aftepost(DataSet: TDataSet);
begin
with DM do begin
TRY
if Dobavit_v_cenu=true then begin
Cena.Append;
Cena.FieldByName('kodzakaz').AsVariant:=zakaz.FieldByName('kodzakaz').A
sVariant;
Cena.FieldByName('koducluga').AsVariant:=uclugi.FieldByName('koducluga')
.AsVariant;
Cena.Post;
59
showmessage('Äîáàâèëè çàïèñü â Öåíó');
Dobavit_v_cenu:=false;
end;
TRAN.SQL.Clear;
TRAN.SQL.Add('COMMIT TRAN');
TRAN.ExecSQL;
EXCEPT
TRAN.SQL.Clear;
TRAN.SQL.Add('ROLLBACK TRAN');
TRAN.ExecSQL;
zakaz.Close;
zakaz.Open;
END;
end;
end;
Приведенный программный код содержит конструкцию TRY..EXCEPT,
которую удобно использовать в приложении для обработки исключений при
использовании механизма транзакций. Конструкция TRY..EXCEPT работает
так:
- если при выполнении операторов блока TRY возникает
исключение, то управление передается первому оператору блока
EXCEPT;
- если исключения не возникло, то операторы блока EXCEPT не
выполняются.
Если в блоке TRY возникает исключение, выполняется инструкция
«ROLLBACK TRAN» языка T–SQL, производящая откат всех изменений в БД,
которые были выполнены с начала транзакции.
Создан обработчик события OnPostError для набора данных ЗАКАЗ
Код обработчика:
procedure TDM.error(DataSet: TDataSet; E: EDatabaseError;
60
var Action: TDataAction);
begin
TRAN.SQL.Clear;
TRAN.SQL.Add('ROLLBACK TRAN');
TRAN.ExecSQL;
zakaz.Close;
zakaz.Open;
end;
Приведенный программный код срабатывает при возникновении ошибки
сохранения текущей записи в ЗАКАЗ, выполняет инструкцию «ROLLBACK
TRAN» языка T–SQL, производящую откат всех изменений в БД, которые были
выполнены с начала транзакции.
Необходимо реализовать связь «много-ко-многим» в обратном
направлении со стороны таблицы Услуги.
Для этого был размещен на Модуле данных (DM) новый набор данных
(компонент класса TADOQuery) с именем, VHOD (от слов «входимость»,
«применимость») и в его свойство SQL написан приблизительный статический
запрос на языке T-SQL
Назначение набора данных VHOD заключается в формировании из
таблицы Цена базы данных только тех записей, поле связи КОДЦЕНА которых
равно полю КОДЦЕНА выбранной записи в наборе данных УСЛУГИ
(посредством работы динамического запроса).
Поскольку в дальнейшем необходимо отобразить содержимое набора
данных VHOD в визуальной таблице на экранной форме, был размещен на
Модуле данных (DM) соответствующий источник данных DSVHOD
(компонент класса TDataSource) и связан с набором данных VHOD через
свойство DataSet. (Рис. 3.18)
61
Рис. 3.18 Модуле данных (DM)
Далее:
Была создана новая экранную форма Form3 (меню File -> New ->
Form);
Размещена на ней визуальная таблица cxGrid (с вкладки Dev Express)
и стандартный компонент DBNavigator (с вкладки Data Controls);
Была установлена связь их с соответствующим источником данных
через свойство DataSource,
активирован набор данных VHOD, присвоив свойству Active значение
True;
добавлены в визуальную таблицу поля, которые отображаются при
выполнении приложения
Разместив на главной экранной форме кнопку «Посмотреть
применимость» (компонент класса TBitBtn), и создан для нее обработчик
события OnClick, в который записан следующий программный код по
формированию записей в наборе данных VHOD из таблицы ЦЕНА базы
данных, связанных с выбранной пользователем записью в наборе данных
УСЛУГИ:
procedure TForm1.clickVHOD(Sender: TObject);
begin
with DM do begin
if NOT uclugi.IsEmpty then begin
VHOD.Close;
62
VHOD.SQL.Clear;
VHOD.SQL.Add('select * from cena');
VHOD.SQL.Add('where
koducluga='+uclugi.FieldByName('koducluga').AsString);
VHOD.SQL.Add('order by kodcena');
VHOD.Open;
Form3.Show;
end;
end;
end;
Динамический запрос формируется при условии, что набор данных
УСЛУГИ не пуст, и поле КОДЦЕНА определено. исунок 3.19).
Рис.3.19 Динамический запрос к базе данных
Было добавлено в разрабатываемом приложении в набор данных VHOD
такое поле выбора, появится возможность в наборе данных VHOD работать
непосредственно с датой выдачи заказа из ЗАКАЗ
С этой целью добавьте в набор данных VHOD все используемые поля и
создайте новое поле – поле выбора – с именем, ДатаВыдачи. Для этого в
контекстном меню для набора данных VHOD были выполнены команды «Add
all fields» и «New Field».

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран