Ver Mensaje Individual
  #2  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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;

(* Se le asignó un valor a la propiedad Text del TField  *)
procedure TForm1.DataSetStockSetText(Sender: TField; const Text: String);
var
  Stock: Double;  // El tipo de la variable dependerá del tipo de tu campo
begin
  if not TryStrToFloat(Text, Stock) then  // ó TryStrToInt, TryStrToCurr, ... (según el tipo de tu campo)
    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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-11-2011 a las 13:02:18. Razón: Agregar comentarios al código
Responder Con Cita