Olá Márcio!
Eu faço assim para campos tipo Date:
procedure TDM.cdsCLIENTESDATA_CADASTROSetText(Sender: TField;
const Text: string);
begin
if Text = ' / / ' then
Sender.AsString := ''
else
Sender.AsString := Text;
end;
Coloque no seu Form Principal ou no Data Module o componente "ApplicationEvents" afim de centralizar as mensagens de erros, veja o exemplo com Data, Hora e Campo Obrigatório:
procedure TFrmPrincipal.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
var
Mensagem: string;
Pos1, Pos2: integer;
begin
if Pos(UpperCase('is not a valid date'), UpperCase(E.Message)) <> 0 then
ShowMessage('Data inválida, proceda a correção.')
else if Pos(UpperCase('is not a valid time'), UpperCase(E.Message)) <> 0 then
ShowMessage('Hora inválida, proceda a correção.')
else if Pos(UpperCase('must have a value'), UpperCase(E.Message)) <> 0 then
begin
Pos1 := Pos('''', E.Message);
Mensagem := E.Message;
Delete(Mensagem, Pos1, 1);
Pos2 := Pos('''', Mensagem);
Mensagem := copy(E.Message, Pos1 + 1, Pos2 - Pos1);
ShowMessage('É obrigatório o preenchimento do campo "' + Mensagem + '".');
end
else
ShowMessage(E.Message);
end;
Espero ter ajudado.
Boa Sorte!
abs
Eduardo Belo