ClientDataSet

Delphi

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 
Rogerio Ferreira

Rogerio Ferreira

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

01/03/2011

qual banco de dados que vc esta utilizando?
GOSTEI 0
Marco Salles

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

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
GOSTEI 0
Marco Salles

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

Rogerio Ferreira

01/03/2011

Valeu, Marco Antonio   Funcionou beleza   Obrigado   Rogerio Barbosa
GOSTEI 0
POSTAR