ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

6 de outubro de 2016

Backup da base de dados com Delphi e FireDac

backup delphi firedac

Olá terrestres. Neste artigo, vamos montar um esquema de backup de uma base de dados FireBird.
Backup sempre foi uma preocupação tanto da parte do desenvolvedor, quanto da parte do usuário.
Claro que nem sempre o usuário se preocupa em fazer backup, mas sempre o sistema é o culpado, se um dia, o banco corromper, não é verdade?
Então, vamos aprender como implementar um recurso de backup, simples, usando o FireDac.
Existem diversas maneiras. Alguns preferem usar o aplicativo WinRar, para este função, no qual, simplesmente, gera um arquivo compactado com o banco de dados. Outros somente fazem uma cópia da base de dados para um determinado local. E outros, geram o arquivo de backup que os próprios SGBDs oferecem. No caso do FireBird, o famoso "FBK".
Neste exemplo, trabalharemos com a geração do arquivo "FBK" que o próprio FireBird oferece, usando alguns componentes da paleta FireDac.
Com base neste exemplo, você poderá incrementar mais recursos, como por exemplo, opção de compactar, agendamentos, etc.
Crie um novo projeto em Delphi e adicione os componentes: FDIBBackup, FDPhysFBDriverLink, FDGUIxWaitCursor, Memo (name = mmoProgresso) e dois Button (name btnIniciar, btnFechar).
Selecione o componente FDIBBackup e ligue na propriedade "DriverLink" o componente FDPhysFBDriverLink.
Tente montar um layout parecido com este:
backup delphi firedac

Obs: o componente ImageList (imgs16x16) está sendo utilizado apenas como repositório das imagens que estão sendo usadas nos botões.
Agora, vamos para as implementações. Declare os seguintes métodos na seção "Private" do formulário:
backup delphi firedac

Vamos implementar primeiro o método "HabilitarBotoes", segue a implementação:
backup delphi firedac

A única coisa que fazemos neste método, é atribuir para a propriedade "Enabled" dos botões o parâmetro da função, que por padrão é "True" conforme especificamos na declaração do método.
Este método será útil quando for iniciado o processo do backup, desabilitaremos os botões, e só habilitaremos novamente, no final do processo, ou caso, der erro e o processo não for concluído.
Agora, vamos implementar o método "GerarBackup". Segue implementação:
backup delphi firedac

Neste método, toda implementação ficará dentro de um bloco de tratamento (try...except), caso ocorrer algum erro durante o processo, simplesmente emitiremos uma mensagem para o usuário.
No início do método, desabilitamos os botões, conforme dito anteriormente.
Alimentamos as propriedades do componente FDIBBackup, que dispensa comentários, visto que, na imagem acima, já está explicando o que significa cada propriedade.
Após chamar o método "Backup" do componente, o processo verdadeiramente se inicia. Se ocorrer tudo bem, uma mensagem é exibida para o usuário, informando que deu tudo certo, e em seguida, volta habilitar os botões. Como por padrão definimos no método "HabilitarBotoes" que seu valor é "True", por este motivo, não passamos nenhum valor para o parâmetro neste ponto do método.
Se por acaso, ocorrer algum erro, o método entrará no bloco de exceção, onde habilitamos os botões e mandamos uma mensagem de erro para o usuário, inclusive, com a mensagem capturada pela classe de exceção do bloco "Try...except".
Simples, prático e objetivo. Desta forma, temos o nosso backup, pronto, implementado. Porém, seria interessante, acompanharmos o processo não?
É exatamente por isso que colocamos um "memo" no projeto. Ele mostrará cada processo realizado.
Para isso, selecione o "memo" e na propriedade "ScrollBars", selecione a opção "ssVertical".
Legal, agora, vá até o evento "OnProgress" do componente "FDIBBackup" e implemente-o da seguinte forma:
backup delphi firedac

A única coisa que fazemos é adicionar no "memo", as linhas de mensagens retornadas pelo serviço de backup do banco. Desta forma, conseguiremos visualizar o processo que está sendo realizado.
Ufa, chegamos ao fim deste artigo, ficou um tanto massante, porém, não tem como ficar com dúvida né? Mas se tiver dúvida, deixe seu comentário que ajudaremos com todo prazer.
Muito bem, agora basta chamar o método no botão. Para isso, de um duplo clique sobre o botão "Iniciar" e chame o método "GerarBackup", e no botão "Fechar", chame o comando "Close", conforme mostra a imagem:
backup delphi firedac

Muito bem gente, algumas dicas que você pode incrementar, é que antes de começão o processo, você pode adicionar uma linha ao "memo" informando que o processo de backup está iniciando, e no final, outra linha informando que o backup foi concluído com sucesso, ou com o erro. Isso poderia substituir as mensagens que exibimos. Também é interessante trabalhar em cima do nome do arquivo de backup, colocando data e hora por exemplo. Fica a critério. Vocês são livres para personalizar da maneira que lhe convém. Abraços e até o próximo.

Download

- Download do código fonte do projeto;

(Por ClipaTec Informática)

25 comentários:

  1. É possível construir as modificações para o bd MySQL?

    ResponderExcluir
    Respostas
    1. Sim. Só que você teria que trocar o componente "FDPhysFBDriverLink" pelo "FDPhysMySQLDriverLink". Abraço.

      Excluir
  2. Como poderia substituir o memo por um TGauge?

    ResponderExcluir
    Respostas
    1. Cremos que sim rsrsrs, só que não temos uma solução para isso ainda. Mas vamos procurar, e postaremos se encontrarmos. Abraço.

      Excluir
  3. Ola, tudo bem? Para usar o MySQL, tentei fazer o q vcs sugeriram: "Sim. Só que você teria que trocar o componente "FDPhysFBDriverLink" pelo "FDPhysMySQLDriverLink". Abraço." porém não deu certo... APontei o DriverLink para este do MySQL mas diz que é Incompatível. Busquei no google e não achei nada a respeito. Obrigado.

    ResponderExcluir
    Respostas
    1. Certo. Você tem o MySQL instalado? Vamos fazer um teste aqui também e postaremos o resultado. Abraço.

      Excluir
  4. Ola. Quer dizer se tenho instalado no PC? Sim, mas seria o acesso a uma base MySQL online... O estranho é que o DriverLink não permite o apontamento para o componente FDPhysMySQLDriverLink. O pior é que na Web não encontro nada sobre isso...

    ResponderExcluir
  5. Olá, quais são os componentes para quem usa o SQL Server?

    ResponderExcluir
    Respostas
    1. Ao invés de usar o componente "FDPhysFBDriverLink", use o "FDPhysMSSQLDriverLink", que é referente ao driver do SQL Server. Abraço.

      Excluir
  6. Desculpe, Mas acredito que você não tenha testado o comando com o Mysql.
    Pois os componentes de backup disponibilizados pelo Firedac não são compatíveis com o Mysql.

    Em nenhum dos componentes de backup reconhece o link do Mysql.

    Se alguém conseguiu me passa como pois nos meus testes não tive sucesso.

    ResponderExcluir
    Respostas
    1. Não fizemos testes com o MySQL, porque trabalhamos com o FireBird, mas vamos tentar fazer alguns testes. Abraço.

      Excluir
  7. Fiz o teste aqui e deu certo. O único probleminha é que eu faço o back-up a partir de um terminal e quero que o arquivo de back-up fique no terminal. Mas, está sendo gerado lá no servidor. Alguém já passou por isso? Se alguém souber o problema, me dá um toque. Obrigado!

    ResponderExcluir
  8. Fiz o teste aqui e deu certo. O único probleminha é que eu faço o back-up a partir de um terminal e quero que o arquivo de back-up fique no terminal. Mas, está sendo gerado lá no servidor. Alguém já passou por isso? Se alguém souber o problema, me dá um toque. Obrigado!

    ResponderExcluir
  9. No caso sua função está implementada no servidor e você apenas a chama pelo client?

    ResponderExcluir
  10. Respostas
    1. Bom dia amigo, segue o link: http://www.clipatecinformatica.com.br/2016/10/restore-base-dados-delphi-firedac.html

      Excluir
  11. Este comentário foi removido pelo autor.

    ResponderExcluir
  12. Na rede não funcionou...

    FDIBBackup1.Host := '192.168.25.178'; // local do servidor da base de dados
    FDIBBackup1.Protocol := ipTCPIP; // protocolo de conexao com a base de dados

    e não consegue conectar... alguma solução ?

    ResponderExcluir
  13. deu certo so que ele pega mesmo tamanho da base quando faz o bpk nao deveria ficar menor ?

    ResponderExcluir
    Respostas
    1. achei ele criava um arquivo menor ou tem fazer algo.. porque quando uso o Gbak fica bem menor

      Excluir
    2. ou estou faltando mudar algo no componente

      Excluir
    3. Vamos fazer alguns testes aqui pra verificar isso. Abraço.

      Excluir
  14. Caso dê erro para fazer o backup local... só mudar de ipTCPIP para ipLocal...
    Aconteceu comigo hehe.

    ResponderExcluir

Visite nossa página de Política de comentarios antes de comentar para ter certeza de que seu comentário não será excluído! Lembre-se, assim que aprovarmos o teu comentário ele será publicado, por isso, não deixe de sempre visitar nosso blog e conferir nossa resposta ao seu comentário, abraço!