OnValidate для TClientDataSet
Я пытаюсь написать событие OnValidate для поля в TClientDataSet, что-то вроде
procedure TForm8.ClientDataSet1MyFieldValidate(Sender: TField);
begin
if Sender.AsFloat > 30 then
raise Exception.Create('Too Much!!!');
end;
Но Sender.AsFloat всегда равен 0 - как мне выполнить проверку на уровне поля (я понимаю, что в этом случае я мог бы использовать ограничения или установить значения Min/Max)
3 ответа
Это ошибка, которая была введена в Delphi XE3, вот отчет о контроле качества и небольшой фильм, который я сделал, чтобы проиллюстрировать проблему. Надеюсь, это будет исправлено в следующем обновлении. В одном из комментариев на странице контроля качества есть исправление, если вам нужно это исправить немедленно.
Это отлично работает на D2010, где разница...
procedure TForm3.FloatValidate(Sender: TField);
begin
if sender.AsFloat > 30 then Showmessage('No');
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
With Clientdataset1 do
begin
FieldDefs.add('ID',ftInteger,0);
FieldDefs.add('Floatfield',ftFloat,0);
Createdataset;
Fields[1].OnValidate := FloatValidate;
end;
end;
Возможно, вы захотите проверить, содержит ли Sender.NewValue значение, которое вы после. Если кэш обновлений в наборе данных клиента активен, вы можете использовать поля OldValue, Value и NewValue.