Fórum Validar datas #193998

10/11/2003

0

Preciso sabe onde exatamente ocorre o evento para testar o formato de um campo data na tabela(Paradox), pois coloquei a função que testa a data no OnExit do dbedit tentando gravar uma data vazia mas o erro ocorre antes da função executar.


Amilton/pr

Amilton/pr

Responder

Posts

10/11/2003

Afarias

uma opção é criar um procedimento genérico de tratamento de erros (Application.OnException) com um código tipo::

var
Handled: Boolean;
begin
Handled := False;
{..}
if (E is EDbEditError) then
begin
if (Sender as TDbEdit).Text = EmptyStr then
begin
(Sender as TDbEdit).Field.Clear;
Perform(WM_NextDlgCtl, 0, 0);
end
else
ShowMessage(´Valor informado inválido. Tecle <ESC> para cancelar.´);
Handled := True;
end;
{...}
if not Handled then
ShowMessage(E.Message); // ou raise E;
end;




T+


Responder

Gostei + 0

10/11/2003

Amilton/pr

E onde eu rodo esse procedimento?


Responder

Gostei + 0

10/11/2003

Afarias

hummm... vc tem q criar um ´Event Handler´ para o evento OnException do Application. vc pode fazer isso no seu form principal por exemplo -- usando o evento OnCreate do form, da forma::


TFormPrinc = class (TForm)
{...}
private
procedure HandleException(Sender: TObject; E: Exception);
end;

{...}

implementation

{...}

procedure TFormPrinc.FormCreate(Sender: TObject);
begin
Application.OnException := HandleException;
end;

procedure TFormPrinc.HandleException(Sender: TObject; E: Exception);
begin
// o código de tratamento do erro aqui!!
end;

{...}


T+


Responder

Gostei + 0

10/11/2003

Amilton/pr

Deixou de dar o erro(dá a mensagem da função) porém não passa para o campo seguinte e acho que não limpa o Dbedit. Tem alguma coisa que pode ser melhorado?


Responder

Gostei + 0

10/11/2003

Afarias

A função do código é justamente ´traduzir´ a mensagem de erro -- cujo objetivo é informar ao usuário q o valor digitado é inválido e ele deve alterar o valor para algo válido ou teclar ESC para cancelar a alteração.


T+


Responder

Gostei + 0

10/11/2003

Amilton/pr

Mas eu quero armazenar a data em branco. Passar pelo campo e gravar o valor nulo. Obrigado pela atenção . . .


Responder

Gostei + 0

10/11/2003

Afarias

qual o componente?? TDBEdit? -- achei q o código deveria funcionar caso vc limpase o DBEdit. Vc pode tb substituir o EmptyStr por::

FormatMaskText((Sender as TDbEdit).Field.EditMask, EmptyStr)

ou, se preferir, vc pode apenas forçar fazendo::


var
Handled: Boolean;
begin
Handled := False;
{...}
if (E is EDbEditError) then
begin
(Sender as TDbEdit).Field.Clear;
Perform(WM_NextDlgCtl, 0, 0);
Handled := True;
end;
{...}
if not Handled then
ShowMessage(E.Message); // ou raise E;
end;


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar