Fórum Campo data inválido #258244
12/11/2004
0
Criei um sistema na plataforma Delphi7, CLX, e tem um campo date que nem sempre é preenchido. Só que o sistema está acusando um erro neste campo do tipo[color=red:60069b0872] Invalid input value[/color:60069b0872]. Já testei e quando todos os campos date estão preenchidos funciona legal. Se tiver um campo com data em branco dá o erro. Imagino que seja necessário tratar campos data que fiquem em branco, pois pelo erro diz que é um valor inválido, só que eu não sei como fazer. Alguém poderia me ajudar?
Eliane Dorr
Curtir tópico
+ 0Posts
12/11/2004
Eliane Dorr
Gostei + 0
12/11/2004
Gandalf.nho
Gostei + 0
12/11/2004
Eliane Dorr
Gostei + 0
12/11/2004
Gandalf.nho
Gostei + 0
16/11/2004
Eliane Dorr
Gostei + 0
16/11/2004
Gandalf.nho
Gostei + 0
16/11/2004
Eliane Dorr
Gostei + 0
16/11/2004
Marco Salles
Gostei + 0
16/11/2004
Eliane Dorr
Gostei + 0
16/11/2004
Marco Salles
Tente Colocar tudo Nove
99/99/9999;1;
2) Sugestão
Se nao de Certo Deve Programar O evento OnSetText Do Campo Field
Gostei + 0
20/11/2004
Joao_schroeder
Estou com este mesmo problema. Tentei colocar tudo 9 como na primeira sugestão, mas não deu certo.
Será que poderia me dizer qual seria o código para usar dentro do evento OnSetText Do Campo Field.
É que sou iniciante e não sei o que devo fazer.
Desde já agradeço
Gostei + 0
22/11/2004
Eliane Dorr
Segue abaixo a descrição do evento OnSetText do campo data que eu estou testando:
procedure TDMDupa.CDSDuplicataVENCE_DESCOSetText(Sender: TField; const Text: String); var Data:TDateTime; begin Data:=StrToDate(Text); if DateToStr(data)=´´ then DMDupa.CDSDupaFornecedorVENCE_DESCO.AsString:=´´ else try DMDupa.CDSDuplicataVENCE_DESCO.AsDateTime:=Data; Except on Econverterror do begin MessageDlg(Text+´ não é uma data válida.Digite novamente!´,MtInformation,[Mbok],0); Abort; end; end; end;
Espero ter ajudado, pois no meu caso funcionou.
Gostei + 0
22/11/2004
Marco Salles
1) opção:
procedure TDMDupa.CDSDuplicataVENCE_DESCOSetText(Sender: TField; const Text: String); begin try Sender.AsDateTime:=DateToStr(Text); Except on Econverterror do begin if text = ´ / / ´ then showmessage(´A Data deve ser Informada´) else MessageDlg(Text+´ não é uma data válida.Digite novamente!´,MtInformation,[Mbok],0); Sender.FocusControl; end; end; end;
Mas e quando eu digitar uma data em Branco :?: :?: :?: Que é Basicamente o contexto do seu Tópico... O Que Irá ocorrer :?: :?: :?:
:arrow: Eu acho que o código Acima Dá [b:122be3db06]erro[/b:122be3db06] :arrow: Ele vai lhe informar que a Data deve ser informada...
Tô so querendo te chamar atenção para um detalhe.. Suponha que se tenha um campo Data_Amissao e um campo Data_Demissao. Este dois Campos Podem Estar Num Mesmo Formulário. So que , quando o Existir Uma Admissao Simultaneamente Não Podera Existir Uma demissao Da mesma Pessoa Ao Mesmo Tempo, e Vice Versa...
Aonde Quero Chegar :?: :?: :?:
Quero Chegar Que ,datas Ou São Digitas Ou Não São Digitas... E A melhor maneira para uma Data não ser digita e Inibir o controle consciente de Dados Relacionados Com a Data que não deve ser Digitada.
Então , no meu caso , quando estou fazendo uma admissão de um funcionário eu Inibo o Controle consciente Relacionado Com A Demissão do Funcionário.. E Vice-versa
Em Outras Palavras, Nada Vejo nada que justifique Num Mesmo Procedimento : Digitar Uma Data ou Deixar de Digitar a Data... Todos Tem Data de Nascimento, Todos tem Data de Falecimento...
Todos Func Tem Data de Admissão , Todos Func Tem Data de Demissão e assim Vai...
Por Ora e so.. Qualquer dúvida e discordancia comunique...
Gostei + 0
22/11/2004
Marco Salles
O Que eu quiz dizer , com tudo isto foi que :
[b:65ccb2e455]Não ha Nada que justifique a Não Digitação De Um Campo Data[/b:65ccb2e455]( Deixar o campo Data o Valor Vazio)...
O Unico Fato que Justifica isto e [b:65ccb2e455]a não utilização Do Campo[/b:65ccb2e455], durante Um Procedimento.. :arrow:
E Neste caso e melhor [b:65ccb2e455]Inibir[/b:65ccb2e455] o Controle Consciente De Dados Relacionados Ao Campo Do Que Ficar [b:65ccb2e455]Programando[/b:65ccb2e455] O Evento OnSetTex [b:65ccb2e455]Do Campo [/b:65ccb2e455]Tfiled.
Agora se voce fizer questão , de deixar o usuário navegar pelos campo datas , e durante a navegação , eles poderem assumir o Valor Vazio
, no meu entendimento a melhor maneira de Fazer Isto e usar um [b:65ccb2e455]MaskEdit[/b:65ccb2e455] ao inves de programar o evento [b:65ccb2e455]OnSetText[/b:65ccb2e455]
Mas no uso de um MaskEdit , na hora de Salvar O Registro de duas umas : :arrow:
Ou o Sistema Informará que a data esta vazia ou ele erradamente irá gravar uma data do tipo :[b:65ccb2e455] 31/12/1900[/b:65ccb2e455]
:arrow: Um erro que aparece constantemente no forum
[b:65ccb2e455]Pode por fim tentar o efeito do código abaixo e ver o seu comportamento:[/b:65ccb2e455]
procedure TDMDupa.CDSDuplicataVENCE_DESCOSetText(Sender: TField; const Text: String); begin try if Text = ´ / / ´ then begin Sender.OnSetText:=Nil; exit; ou Abort; //Nao sei Qual dos dois ????? end Sender.AsDateTime:=DateToStr(Text); Except on Econverterror do begin else MessageDlg(Text+´ não é uma data válida.Digite novamente!´,MtInformation,[Mbok],0); Sender.FocusControl; end; end; end;
O Proximo Passo e Fundamental e no evento OnExit Do Controle Consciente De Dados Relacionado a este Campo Voce Deve Reeconectar
O Evento OnSetText ...
:arrow: A Seguir e muito importante
procedure TForm1.DBEdit1Exit(Sender: TObject); begin CDSDuplicataVENCE_DESCO.OnSetText:=CDSDuplicataVENCE_DESCOSetText; end;
Tudo isto com a mascara : [b:65ccb2e455]99/99/999;1;_[/b:65ccb2e455]
Como e um código que esta no evento [b:65ccb2e455]OnExit[/b:65ccb2e455] voce deve tb se :cry: preocupar nos casos onde não se perde o Foco :wink: (Teclas de Atalho, componentes do tipo TBitButton etcc...
Alguma Dúvida :?: :?: :?: :?: :?:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)