Hola.
Una forma puede ser aprovechar el evento
OnSetText del campo a evaluar, que ocurre cuando se le asigna un valor a la propiedad
Text del
TField pero antes de guardar el cambio.
Lo podés crear desde el
Object Inspector, haciendo doble click sobre el campo persistente, o bién por código.
Un ejemplo por código:
Código Delphi
[-]
type
Form1 = class(TForm)
...
private
procedure DataSetStockSetText(Sender: TField; const Text: String);
public
end;
....
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
DataSet.FieldByName('STOCK').OnSetText:= DataSetStockSetText;
end;
procedure TForm1.DataSetStockSetText(Sender: TField; const Text: String);
var
Stock: Double; begin
if not TryStrToFloat(Text, Stock) then raise Exception.Create('Error no es un número válido')
else if Stock > DataSet.FieldByName('STOCK').AsFloat then
raise Exception.Create('Stock inexistente')
end;
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
DataSet.FieldByName('STOCK').OnSetText:= nil;
end;
Saludos.