Delphi 3 и создание приложений баз данных

Реализация бизнес-правил в иных компонентах


Бизнес-правила могут реализоваться и при помощи иных компонентов приложения. Обычно при попытке выполнения некоторого действия проверяются значения каких-либо переменных, которые затем станут значениями полей (столбцов) таблицы БД, или - при вводе пользователем неверных значений -блокируется кнопка подтверждения изменений или выхода из формы.

Проверка правильности значения

Приводимый ниже пример проверяет значение в Edit 1.Text на предмет соответствия формату даты. В дальнейшем это значение, приведенное к формату даты, планируется записать в поле типа даты таблицы БД. Проверка производится в обработчике события OnButtonClick (компонент TButton):

procedure TToObrForm.GoButtonClick(Sender: TObject);

var Tmp: TDateTime;

begin

TRY

Tmp := StrToDate(Editl.Text);

EXCEPT

ShowMessage('Неверная дата') ;

Editl.SetFocus;

Exit;

END;//try



end;

Запрет подтверждения изменений в БД

В случае невыполнения какого-либо условия в форме может быть запрещена кнопка, реализующая запоминание внесенных изменения в БД:

procedure TToObrForm.GoButtonClick(Sender: TObject);

var Tmp: TDateTime;

begin

TRY

Tmp := StrToDate(Editl.Text);

EXCEPT

ShowMessage('Неверная дата');

Edit1.SetFocus;

PostButton.Enabled := False;

Exit;

END;//try

end;

Отмена выхода из формы до осуществления каких-либо действий

В случае изменения какого-либо значения и до выполнения какого-либо условия в форме может быть запрещена кнопка, реализующая выход из модальной формы:

procedure TForm1.DBEditlChange(Sender: TObject);

begin

ExitButton.Enabled := False;

end;

procedure TForm1.Table1AfterPost(DataSet: TDataSet) ;

begin

ExitButton.Enabled := True;

end;

Заметим, что из такой формы можно выйти при помощи системного меню и комбинации клавиш Alt + F4. Поэтому нужно отменить для формы системное меню и при попытке выхода в обработчике события OnCloseQuery формы такую попытку блокировать.

Выполнение действий при переходе на другую запись

Событие OnDataChange компонента TDataSource происходит при изменении текущей записи в НД (в режиме dsBrowse} или при изменении какого-либо поля записи (режим dsEdit).

В приводимом примере подразумевается, что для текущей записи в ParentTable по запросу (нажатие кнопки SelectChildRecordsButton) в НД ChildTable фильтруются дочерние записи.

При переходе на новую запись в ParentTable содержимое ChildTable до нового нажатия кнопки SelectChildRecordsButton становится неактуальным. Поэтому таблица TDBGrid, показывающая дочерние записи, окрашивается в серый цвет и визуализируется кнопка SelectChildRecordsButton:

procedure TForm1.ParentDataSourceDataChange(Sender: TObject;

Field: TField) ;

begin

IF ParentTable.State <> dsBrowse THEN Exit;

ChildDBGrid.Enadbled := True;

ChildDBGrid.Color := cISilver;

SelectChildRecordsButton.Visible := True;

end;

Те же действия можно реализовать в обработчике события AfterScroll набора данных, возникающем после перехода на новую запись в НД.



Содержание раздела