Validar datas
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
Curtidas 0
Respostas
Afarias
10/11/2003
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+
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+
GOSTEI 0
Amilton/pr
10/11/2003
E onde eu rodo esse procedimento?
GOSTEI 0
Afarias
10/11/2003
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+
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+
GOSTEI 0
Amilton/pr
10/11/2003
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?
GOSTEI 0
Afarias
10/11/2003
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+
T+
GOSTEI 0
Amilton/pr
10/11/2003
Mas eu quero armazenar a data em branco. Passar pelo campo e gravar o valor nulo. Obrigado pela atenção . . .
GOSTEI 0
Afarias
10/11/2003
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+
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+
GOSTEI 0