Validar dado no DBGrid antes de inserir no registro
Preciso certificar de que a ao inserir ou atualizar um campo tipo data a data digitada pelo usuário não seja maior do que a data atual.
O que eu quero é usar algo do tipo:
Esta data é inserida em um célula do DBGrid. Estou usando ADO.
O que eu quero é usar algo do tipo:
if (DataInserida > Now) then ShowMessage (´Data Inválida´);
Esta data é inserida em um célula do DBGrid. Estou usando ADO.
Tatuweb
Curtidas 0
Respostas
Steve_narancic
06/04/2009
Você pode utilizar o Evento OnValidate do seu dataset para fazer suas validações, ou no BeforePost
GOSTEI 0
Tatuweb
06/04/2009
Blz, resolvi em parte do jeito que vc falou. Fiz assim
Aparece a mensagem como eu quero mas só que a operação é realizada mesmo assim e eu queria que caso data informada fosse inválida o programa não permitisse a inserção deste dado e voltasse o foco para a célula onde a data foi digitada.
procedure TFrmMain.ADOTableBeforePost(DataSet: TDataSet); begin if DataSet.FieldByName(´DataEmissao´).AsDateTime > Now then ShowMessage (´A data da emissão não pode ser maior do que a data atual.´); end;
Aparece a mensagem como eu quero mas só que a operação é realizada mesmo assim e eu queria que caso data informada fosse inválida o programa não permitisse a inserção deste dado e voltasse o foco para a célula onde a data foi digitada.
GOSTEI 0
Tatuweb
06/04/2009
Resolvi esta última parte. Coloquei um DataSet.Edit; depois da exibição da msg. Vlw pela ajuda.
GOSTEI 0
Tatuweb
06/04/2009
Quero dizer, esse dataset.edit só resolveu quando eh para atualizar mas quando se trata de inserção não funciona. Ainda estou com o problema.
GOSTEI 0
Lehapan
06/04/2009
Caro TatuWeb,
coloque este código no evento OnBeforePost.
espero ter ajudado.
coloque este código no evento OnBeforePost.
if DateOf(DataSet.FieldByName(´DataEmissao´).AsDateTime) > DateOf(Now) then
begin
FieldByName(´DataEmissao´).FocusControl; { Para colocar o foco no campo }
DatabaseError( ´A data da emissão não pode ser maior do que a data atual.´ ); { para dar uma mensagem de erro e não gravar, pois continua com o DataSet.State igual, ou seja, se estiver em dsInsert, continua em dsInsert, caso esteja em dsEdit, continua em dsEdit. }
end
;
espero ter ajudado.
GOSTEI 0
Tatuweb
06/04/2009
Blz! Funcionou tranquilo. Grato!
GOSTEI 0