ClientDataSet
Caros Amigos,
Tenho uma aplicação uso um DBEdit para uma campo definido como data no meu ClientDataSet.
O problema é que quando digito uma data inválida nesse campo e teclo enter recebo a seguinte mensagem do Delhi:
Project Gespag.exe raise exception class EConvertError with message "25/15/2011 is not a valide date".
Como validar essa data e mandar uma mensagem para o usuário? Seria no evento OnValidade do campo no CDS?
Atenciosamente
Rogerio Barbosa
Rogerio Ferreira
Curtidas 0
Respostas
Leonardo Xavier
01/03/2011
qual banco de dados que vc esta utilizando?
GOSTEI 0
Marco Salles
01/03/2011
Caros Amigos,
Tenho uma aplicação uso um DBEdit para uma campo definido como data no meu ClientDataSet.
O problema é que quando digito uma data inválida nesse campo e teclo enter recebo a seguinte mensagem do Delhi:
Project Gespag.exe raise exception class EConvertError with message "25/15/2011 is not a valide date".
Como validar essa data e mandar uma mensagem para o usuário? Seria no evento OnValidade do campo no CDS?
Atenciosamente
Rogerio Barbosa
Muitas opçoes , entre elas é usar o evento onsetText do Tfield
Veja um exemplo
procedure TSeuForm.SeuCampodataSetText(Sender: TField; const Text: string);
var
Data:TDatetime;
begin
if text <> '' then
if (TryStrToDate(sender.AsString,Data)) then
sender.AsString:=Text;
begin
sender.FocusControl;
showmessage('Data Inválida');
end;
end;GOSTEI 0
Rogerio Ferreira
01/03/2011
Caros Marcos,
Funcionou, mas quando eu dou ok na janela de erro, o foco volta para o campo de data mas o mesmo aparece sem a máscara de edição e quando vou digitar a data certa, só consigo digitar um caracter, quando digito o outro ele cobre o primeiro.
Eu tenho essa procedure para aceitar o enter e passar para o próximo campo:
procedure TFrmNotasFiscais.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
key := #0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
Atenciosamente Rogerio Barbosa
begin
if key = #13 then
begin
key := #0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;
Atenciosamente Rogerio Barbosa
GOSTEI 0
Marco Salles
01/03/2011
Caros Marcos,
Funcionou, mas quando eu dou ok na janela de erro, o foco volta para o campo de data mas o mesmo aparece sem a máscara de edição
foi programadopara isto mas da para altera
e quando vou digitar a data certa, só consigo digitar um caracter, quando digito o outro ele cobre o primeiro.
é porque esquecii da exceção ...
Veja
procedure TSeuForm.SeuDataSet1SeuCampodataSetText(Sender: TField; const Text: string);
var
Data:TDatetime;
begin
if text <> ' / / ' then
begin
if (TryStrToDate(Text,Data)) then
sender.AsString:=Text
else
begin
sender.FocusControl;
showmessage('Data Inválida');
abort;
end
end
else
sender.clear;
end;GOSTEI 0
Rogerio Ferreira
01/03/2011
Valeu, Marco Antonio
Funcionou beleza
Obrigado
Rogerio Barbosa
GOSTEI 0