Fala ai Radizeiros e Radizeiras, tudo bem com vocês?
Estamos trabalhando constantemente para levar conteúdos de qualidade para vocês, e aqui no blog não falta é conteúdo para lhe auxiliar.
Dominar todas as funcionalidades do Firedac é primordial, e o mesmo vai além de simplesmente conectar no banco de dados.
Temos funcionalidades que nos auxiliam e muito no nosso dia a dia, e não poderia faltar os tratamentos de erros.
E no post de hoje estarei lhe mostrando como é possível realizar esses tratamentos utilizando o Firedac.
O Firedac tem uma particularidade que é o Handling Errors.
O que o pessoal da Embarcadero fez, foi criar uma camada de abstração em cima das classes de conexão, onde conseguimos centralizar os erros que acontecem dentro do nosso processo de conexão.
O que tínhamos antes é que para cada banco de dados retornava o erro de um jeito diferente.
Onde o banco de dados trazia uma mensagem de erro diferente para cada banco de dados.
Os SGDBs não possuem um padrão de mensagem de erro, e com essa camada de abstração criada no Firedac, podemos centralizar essas mensagens.
Agora você consegue trabalhar com vários banco de dados, e todos eles com as mensagens que você pode tratar e apresentar para o seu cliente de uma forma bem legal.
Dentro do Firedac temos uma classe chamada EFDDBEngineException que centraliza todas as exceções.
Vamos pegar esse mesmo exemplo que estamos trabalhando aqui dentro do blog.
E nele iremos fazer uma validação dentro do botão de insert com parâmetros.
Observe que dentro do código colocamos um try except que é normal no que já fazemos dentro do Delphi.
Dentro dessa nossa exceção nós usando o E.Kind, que são os tipos de erros que nós temos no Firedac.
Se analisamos dentro desse tipo iremos perceber que ele é um enumerado.
Onde os principais tipos de erros estão já incluídos dentro desse Kind.
procedure TForm1.Button5Click(Sender: TObject); begin try FDConnection1.ExecSQL('INSERT INTO TESTE (ID, NOME) VALUES (:ID, :NOME)', [StrToInt(Edit1.Text), Edit2.Text], [ftInteger, ftString]); except on E : EFDDBEngineException do begin case E.Kind of ekOther: ; ekNoDataFound: ; ekTooManyRows: ; ekRecordLocked: ; ekUKViolated: ShowMessage('Já Existe esse ID'); ekFKViolated: ; ekObjNotExists: ; ekUserPwdInvalid: ; ekUserPwdExpired: ; ekUserPwdWillExpire: ; ekCmdAborted: ; ekServerGone: ; ekServerOutput: ; ekArrExecMalfunc: ; ekInvalidParams: ; end; end; end; end;
Se observar nós personalizamos a saída de erro de primary key para o usuário .
Essa mensagem não importa qual seja o tipo de SGDB que esteja usando, estamos personalizando essa saída deixando algo genérico.
Esse exemplo está inserindo na tabela nossa de exemplo.
Observe que já temos o id 1 dentro dessa nossa tabela, vamos colocar essa informação e tentar inserir o mesmo id dentro desse insert.
Ao executarmos o nosso exemplo e tentado inserir o mesmo id, é retornado a mensagem que personalizamos.
De uma forma bem mais simples nós traduzimos a mensagem de erro do banco de dados.
Uma mensagem bem mais clara, e intuitiva para o usuário final, melhor que aquela mensagem horrível que aparece em muitos sistemas, onde é retornado a mesma mensagem de erro do banco, algo desconhecido para o usuário.
Muito legal essa dica não é verdade?
Para quem tem o CLUBE DOS PROGRAMADORES DELPHI nós temos uma aula onde eu mostro como centralizar as exceptions.
Onde você consegue centralizar todas as exceções do seu software em um único lugar.
Se o seu software tem as exceções em um único lugar, você consegue fazer esse tratamento do Firedac em um único lugar também.
E caso você tenha interesse de conhecer mais sobre as técnicas do Firedac acessa o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI, onde você não só terá conteúdos relacionados ao Firedac, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI