Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 09 de Setembro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
124 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Traduzindo as mensagens de exceções do sistema
Publicado por karlosrapanui : Sexta, Fevereiro 09, 2007 - 08:28 GMT-3 (5527 leituras)
Comentários 6 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Uma maneira bastante prática de se tratar exceções no sistema, podendo até traduzir as mensagens que possivelmente apareceriam ao usuário, é utilizar o ApplicationEvents.

Este componente possui vários eventos que ocorrem em toda a aplicação, fazendo com que o código fique centralizado, e seja automaticamente utilizado por todo o programa. Veja abaixo um exemplo de como utiliza-lo para identificar e traduzir as exceções do sistema.

Adicione ao formulário principal um ApplicationEvents, e no evento onException, coloque o código:

Nota: Somente 1 componente é necessário, pois ele irá monitorar todas as units e formulários da aplicação.

procedure TForm1.ApplicationEventsException(Sender: TObject; E: Exception);
var
  mensagemerro : string;
  p1, p2: integer;
begin
  //violação de chave primária
  if pos(upperCase('violation of primary or unique key constraint'), UpperCase(E.Message)) > 0 then
  begin
    beep;
    showmessage('O valor digitado para o campo já existe no cadastro.');
    Exit;
  end;

  //valor inválido para o campo
  if pos(UpperCase('Input value'), UpperCase(E.Message)) <> 0 Then
  begin
    beep;
    showmessage('Campo preenchido com valor inválido. Proceda a correção.');
    Exit;
  end;

  //data inválida
  if pos(UpperCase('is Not a valid date'), UpperCase(E.Message)) <> 0 Then
  begin
    beep;
    showmessage('Data inválida, proceda a correção.');
    Exit;
  end;

  //campo de preenchimento obrigatório - Required = True
  if pos(upperCase('must have a value'), UpperCase(E.Message)) > 0 then
  begin
    beep;
    p1:= Pos('''', E.Message);
    mensagemerro:= E.Message;
    delete(mensagemerro, p1, 1);
    p2:= Pos('''',mensagemerro);
    mensagemerro:= copy(E.Message, p1 + 1, p2 - p1);
    ShowMessage('O campo [ '+ mensagemerro + ' ] é de preenchimento obrigatório.');
  end;

  //campo de preenchimento obrigatório - Not Null
  if pos(upperCase('validation error for column'), UpperCase(E.Message)) > 0 then
  begin
    beep;
    mensagemerro := Copy(E.Message, 29, pos(',', E.Message) - 29);
    ShowMessage('O campo [ '+ mensagemerro + ' ] é de preenchimento obrigatório.');
  end;
end;

Com esse código, quem programa utilizando DataSets (ClientDataSet, Table, Query) e DataControls (DBEdit, DBComboBox, DBGrid), não precisará mais se preocupar em validar os dados no botão Gravar ou nos eventos onExit, verificando se um campo foi preenchido, ou se é uma data é válida. Basta configurar o campo obrigatório com a propriedade Required = True. O próprio ApplicationEvents identifica que uma exceção foi gerada pelo DataSet e então passa pelo procedimento que acabamos de criar, traduzindo a mensagem!

Espero ter ajudado.

[]'s
Carlos



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: vazcaino : Fev 22, 2007 - 05:03
(Informações sobre o membro | Enviar uma mensagem) http://http://
Ótimo código!!!


por: Ullrich (maycon123@hotmail.com) : Fev 17, 2008 - 10:53
(Informações sobre o membro | Enviar uma mensagem) http://
Ótimo o código, porem estou com dificuldades, de qual componente é essa propriedade Requered.


Basta configurar o campo obrigatório com a propriedade Required = True dificuldades


por: Ernane (sgdjalma@sds.pe.gov.br) : Mai 22, 2009 - 03:03
(Informações sobre o membro | Enviar uma mensagem) http://http://
Como eu poderia com isso aproveitar e setar o focus no DataControls (DBEdit, DBComboBox) que deu erro na validação.


por: SSGOMES0709 (ssginformatica@gmail.com) : Abr 25, 2017 - 01:38
(Informações sobre o membro | Enviar uma mensagem)
Uso TSimpleDataSet, e não surtiu efeito algum. Tem algo que se aplique ao TSimpleDataSet ?


por: SSGOMES0709 (ssginformatica@gmail.com) : Mai 06, 2017 - 01:34
(Informações sobre o membro | Enviar uma mensagem)
USO SimpleDataSet,e as instruções não funcionam


por: felipeonishi (felipeonishi@live.com) : Ago 09, 2017 - 05:06
(Informações sobre o membro | Enviar uma mensagem) http://
Cara, valeu!!!!!

Eu estava procurando uma solução para o meu software e você me ajudou muito, funcionou do jeito que você disse. Meus Parabéns!

Obrigado!
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados