onBeforePost — средство проверки введенных значений

Проверка введенных значений через событие onBeforePost

Событие OnBeforePost в наборе данных (dataset) в Delphi происходит перед тем, как набор данных сохранит изменения в базу данных. Это событие позволяет вам выполнить пользовательскую логику или проверить данные перед сохранением.

Осуществить проверку данных через событие OnBeforePost можно следующим образом:

procedure TfrmPrihod.adoQuery1BeforePost(DataSet: TDataSet);
 var
    iKolvo: Integer;
 begin
    iKolvo:=DataSet.FieldByName('Количество').AsInteger;
    if iKolvo<0 then
    begin
       Application.CreateForm(TfrmMessage,frmMessage);
       frmMessage.Left:=Round(frmPrihod.Left +(frmPrihod.Width-frmMessage.Width)/2);
       frmMessage.Top:=Round(frmPrihod.Top +(frmPrihod.height-frmMessage.height)/2+20);
       frmMessage.lblMessage.Caption:='Поле "Количество" должно содержать положительное значение!';
       frmMessage.ShowModal();
       abort;
    end;
 end;

В данном примере имеется набор данных adoQuery1, в котором есть поле «Количество». Пользователь через элемент управления TDBGrid (О том, как настроить красоту в TDBGrid смотрите в статье: «Как улучшить внешний вид DBGrid» и «Как улучшить внешний вид DBGrid (часть 2)») или TDBEdit ввел количество в данное поле и теперь ему нужно сохранить эти данные. Что мы можем сделать в данном случае, чтобы проверить корректность ввода данных. Ну, например, чтобы пользователь случайным образом не ввел отрицательное значение.

Сначала мы считываем значение из поля «Количество» и запоминаем его в переменной.

iKolvo:=DataSet.FieldByName('Количество').AsInteger;

Дальше проверяем, что если наша переменная меньше нуля, то мы выводим диалоговое окно, в котором сообщаем пользователю, что количество должно содержать положительное значение.

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

Окно обязательно следует вывести модально, чтобы пользователь обязательно прочитал и не смог проигнорировать данное сообщение:

frmMessage.ShowModal();

Ключевым моментов во всем этом является команда Abort, которая в буквальном смысле останавливает выполнение кода в процедуре приложения. К сведению, процедура в Delphi — это тоже самое, что и метод в C#.

Таким образом, при выполнении данной процедуры происходит вывод окна-предупреждения и последующая остановка выполнения кода приложения.

Теперь пользователь должен будет закрыть окно и внести поправку в значение поля «Количество».

Еще одним вариантом контроля может быть использование события onKeyPress. Оно возникает при нажатии и отпускании кнопки клавиатуры. Данное событие уже относится не к набору данных, а к элементу управления. Это может быть как TEdit, TDBEdit, TDBGrid и т.п. Например, сделаем запрет на ввод отрицательных чисел в объект txtKolVoKeyPress, образованный от класса TEdit:

procedure TfrmProdagi.txtKolVoKeyPress(Sender: TObject; var Key: Char);
 begin
   if not (Key in ['0'..'9', #8]) then
      Key := #0;
 end;

Как видим, процедура очень короткая.

Теперь давайте посмотрим на пример того, как можно запретить ввод с клавиатуры в определённое поле объекта TDBGrid. Это можно сделать и использовав поле набора данных, которое привязано к одноименному полю объекту TDBGrid. Но бывают случаи, когда необходимо ограничить ввод только в одном из элементов управления. В этом случае удобно проводить ограничение именно в в самом элементе управления.

procedure TfrmMatchi.DBGrid1KeyPress(Sender: TObject; var Key: Char);
 begin
   if DBGrid1.SelectedField.fieldName='Тип_обучения' then key:=Chr(0);
 end;

В этом коде, если активным является поле «Тип обучения», ну то есть, мы пытаемся в него что-то записать с клавиатуры, то любое нажатие будет сбрасываться путем присваивания параметру Key значения Chr (0). Это может пригодиться в том случае, если у поля есть предустановленные значения, которые должны быть введены в поле. Чаще всего — это список с определенными значениями, одно из которых следует выбрать.

Ну вот, мы рассмотрели несколько примеров того, как можно проводить контроль ввода данных. Если статья была интересная, оставь комментарий и поделись с друзьями!

Понравилась статья? Поделиться с друзьями:
Блог Алексея Иванкова
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: