Campo data inválido
Boa tarde.
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?
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
Curtidas 0
Respostas
Eliane Dorr
12/11/2004
Ah, o banco de dados que eu uso é Interbase.
GOSTEI 0
Gandalf.nho
12/11/2004
Está usando qual componente de acesso aos dados?
GOSTEI 0
Eliane Dorr
12/11/2004
Estou usando SqlConnection, SqlDataSet, DataSetProvider e ClientDataSet.
GOSTEI 0
Gandalf.nho
12/11/2004
Por acaso, esse campo data não está como requerido no banco de dados ou no próprio dataset?
GOSTEI 0
Eliane Dorr
12/11/2004
Não.
GOSTEI 0
Gandalf.nho
12/11/2004
Tem alguma máscara no campo?
GOSTEI 0
Eliane Dorr
12/11/2004
Tem máscara, sim. No componente ClientDataSet eu inseri a máscara, assim como em todos os outros campos date.
GOSTEI 0
Marco Salles
12/11/2004
e qual a mascara????
GOSTEI 0
Eliane Dorr
12/11/2004
!99/99/0000;1;
GOSTEI 0
Marco Salles
12/11/2004
1) Sugestão
Tente Colocar tudo Nove
99/99/9999;1;
2) Sugestão
Se nao de Certo Deve Programar O evento OnSetText Do Campo Field
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
Joao_schroeder
12/11/2004
Como vai?
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
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
Eliane Dorr
12/11/2004
Bom dia.
Segue abaixo a descrição do evento OnSetText do campo data que eu estou testando:
Espero ter ajudado, pois no meu caso funcionou.
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
Marco Salles
12/11/2004
Voce pode alterar o seu código para:
1) opção:
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...
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
Marco Salles
12/11/2004
[b:65ccb2e455]Eu estava acabando o Tópico quando tive que sair às Pressas[/b:65ccb2e455]
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]
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
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 :?: :?: :?: :?: :?:
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