Как проверить предыдущее значение поля из обработчика события OnValidate?
Мне нужно проверить новое значение TField
основанный на предыдущей стоимости самого поля.
Например: значение поля может быть изменено только на большие значения
procedure TForm1.FldOnValidate(AField : TField);
begin
if(???) then
raise Exception.Create('The new value is not bigger than the previous one');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Dst : TClientDataSet;
Fld : TIntegerField;
begin
//dataset
Dst := TClientDataSet.Create(Self);
Dst.FieldDefs.Add('TEST', ftInteger, 0);
Dst.CreateDataSet();
Dst.Active := True;
Fld := Dst.Fields[0] as TIntegerField;
Dst.Append();
Fld.AsInteger := 5;
Dst.Post();
Fld.OnValidate := FldOnValidate;
//this should be ok (from 5 to 6)
Dst.Edit;
Fld.AsInteger := 6;
Dst.Post;
//this should not pass the validation (from 6 to 5)
Dst.Edit;
Fld.AsInteger := 5;
end;
Я пытался проверить OldValue
, NewValue
, AsVariant
а также Value
свойства, но я всегда получаю новое значение:
procedure TForm1.FldOnValidate(AField : TField);
begin
ShowMessage(
'OldValue = ' + VarToStr(AField.OldValue) + sLineBreak +
'NewValue = ' + VarToStr(AField.NewValue) + sLineBreak +
'AsVariant = ' + VarToStr(AField.AsVariant) + sLineBreak +
'Value = ' + VarToStr(AField.Value)
);
end;
Надеюсь, что кто-то может просветить меня об этом
1 ответ
Использование Unassigned
procedure TForm1.FldOnValidate(AField : TField);
begin
if Sender.OldValue <> Unassigned then
if Sender.NewValue <= Sender.OldValue then
raise Exception.Create('The new value is not bigger than the previous one');
end;
Но правильное место OnChange
событие
procedure TForm1.ClientDataSet1ValChange(Sender: TField);
begin
if Sender.OldValue <> Unassigned then
if Sender.NewValue <= Sender.OldValue then
raise Exception.Create('The new value is not bigger than the previous one');
end;