PDA

Ver la Versión Completa : onValidate de un campo (Excepciones)


Caro
06-06-2006, 20:48:17
Hola a todos

Quisiera poder validar dos campos de mi debgrid uno es el precio de tipo float y el otro es la fecha de tipo date, he leido hilos referente a esto y he hecho muchas pruebas pero aun no me funciona, estoy desesperada les agradeceria un monton a todos los que pudieran ayudarme.

Hice las siguientes pruebas


type
EFecha = class(Exception)
....

procedure TCompras.qryfechaValidate(Sender: TField);
var
fch: TDateTime;
begin
if not TryStrToDate(Sender.AsString,fch) then
begin
raise EFecha.Create('Fecha Incorrecta');
end
end;



tambien he probado estos otros dentro del evento onValidate del campo fecha


try
StrToDate(Sender.AsString);
except
on exception do ShowMessage('Fecha Incorrecta');
end;



try
StrToDate(Sender.AsString);
except
on EConvertError do ShowMessage('Fecha Incorrecta');
else
ShowMessage('Fecha Incorrecta');
end;


en todos estos casos si borro todo lo que hay en la celda del dbgrid donde esta la fecha y salgo a otra celda se lanza mi excepción y me saca el mensaje de 'fecha incorrecta' pero si escribo digamos 54 que no llegaria a ser una fecha me saca este mensaje

'54' is not a valid date and time

y yo quiero que me saque el mensaje que he puesto pero nose porque no lo saca he probado de las formas que puse arriba y nada de nada que funciona en este caso, que estoy haciendo mal me pueden orientar por favor.

Y en el caso del precio con lo siguiente


try
StrToCurr(Sender.AsString);
except
on exception do ShowMessage('Precio Incorrecto');
end;


si escribimos 45,,57 el error serian las dos comas y tampoco veo el mensaje que yo pongo sino lo siguiente.

45,,57 is not a valid floating point value for field 'precio'

como le hago para que salgan mis mensajes en estos casos.

Delphi7, Access

Saludos y que tengan un bonito dia

celades1
06-06-2006, 22:11:58
Hola

Yo para lo que tu quieres yo utilizo el evento onsettetx ya que hace la comprobacion justo antes de captar el valor el field


procedure TFDades_Assentament.AssentamentDATASetText(Sender: TField;const Text: String);
begin
if trim(text)<>'' then
try
sender.AsDateTime:= strtodate(text);
except
ShowMessage('Formato de Fecha Incorrecta');
end;
end;



Saludos

Caro
06-06-2006, 22:33:22
Miles y miles de gracias celades1, es justo lo que necesitaba

Saludos