Fórum Sobre validação de Data #284109
08/06/2005
0
Bruno Belchior
Curtir tópico
+ 0Posts
08/06/2005
Rssampaio
Gostei + 0
08/06/2005
Bruno Belchior
Gostei + 0
09/06/2005
Sandra
Teste a function [b:aec74a0958]TryStrToDate[/b:aec74a0958]. Um exemplo:
var data: TDateTime; begin if (TryStrToDate(DBEdit1.Text, data)) then begin // Data válida end else begin // Data inválida end; end;
Mais informações, no help do Delphi. :D
Gostei + 0
09/06/2005
Bruno Belchior
Gostei + 0
09/06/2005
Marco Salles
Talvez , não seria mais fácil ao inves de ´desativar isto´ voce usar um componente que não fosse um controle consciente de dados...
Não lhe serve esta idéia :?: :?: :?:
Gostei + 0
10/06/2005
Bruno Belchior
Gostei + 0
11/06/2005
Marco Salles
enrendo... Então sugiro que voce utilize o evento onSetText Do campo..
tipo o isto :
procedure TForm1.Table1NomeCampoSetText(Sender: TField); begin try sender.Value:=strtodate(Text); except on E:Exception do begin // showmessage(´Data inválida´); pode colocar mensagem ou não // sender.value:= se quiser corrija para un numero válido ou //sender.text := ´´ ; se aceitar end; end; end;
Quando voce estiver rodando o programa va delphi , a mensagem ainda aparecerá..
Mas quando voce estiver rodando o programa via executável , o erro será tratado a tempo e a mensagem não sera vista pelo usuário.. A não ser que voce escreva uma mensagem particular
É isto que voce quer :?: :?: :?:
Gostei + 0
11/06/2005
Bruno Belchior
Gostei + 0
13/06/2005
Bruno Belchior
Gostei + 0
14/06/2005
Marco Salles
[b:39148e791f]Voce esta fazendo algum outro tipo de validação em outro evento.. Por exemplo , OnValidade... [/b:39148e791f]
O certo é ele cancelar a alteração , caso o valor não seje válido.. Mas se for ele não deveria fazer isto... Talvez o que possa estar ocorrendo , com voce , são eventos que ficam se repetindo( Tipo , um fica chamando o outro de maneira recursiva) , ai nesse caso ele pode voltar ao seu valor inicial
Então temos que talvez analisar todo um processo e não um evento isolado...
Gostei + 0
14/06/2005
Bruno Belchior
Gostei + 0
14/06/2005
Marco Salles
Acho que não precisa mais , pelo menos para este campo
a algum código onexit no seu DbGrid :?:
Gostei + 0
14/06/2005
Bruno Belchior
Gostei + 0
14/06/2005
Marco Salles
A Principio funcionou:::
P:S O evento ossetText que e testei Chama Table1Data_AdmissaoSetText, Troque pelo seu
procedure TForm1.Table1Data_AdmissaoSetText(Sender: TField; const Text: String); var erro:Boolean; data:Tdate; begin begin try try erro:=False; data:=strToDate(text); except on E:Exception do begin erro:=True; showmessage(´Data inválida´); // pode colocar mensagem ou não end; end; finally begin if not erro then begin PlaySound(´Campainha do Windows XP´,0,snd_Async); TField(sender).OnSetText:=Nil; //************* sender.AsDateTime:=Data; //P:S O evento ossetText que e testei Chama //Table1Data_AdmissaoSetText, Troque pelo seu TField(sender).OnsetText:=Table1Data_AdmissaoSetText; //****** end; end; end; end; end;
[b:ad7af9490a]P:S talves as linhas de codigo gravadas por ******** Sejam desnecessária
Tente com elas e tente sem elas.. As coloquei so por precaução, Para evitar uma possivel reechamada ao evento[/b:ad7af9490a]
mas cada caso é um caso.. Tenta ai , e se não conseguir continue postando , Não desanima não...
Se eu não souber , outros possivelmente saberão
Gostei + 0
15/06/2005
Bruno Belchior
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)