Gostaria de iniciar este artigo voltando ao passado quando os SGBD’s nem eram tão utilizados no dia a dia e SQL parecia uma linguagem extremamente difícil tanto de entender quanto de usar. Nem sou tão velho assim, mas me lembro como era difícil atualizar o banco de dados de meus clientes feito em Paradox. Era tabela pra cá, telefonema pra lá e muitos, muitos e-mails.

Hoje a situação mudou, aliás, de um bom tempo pra cá, às coisas tem mudado. Porém ainda me perguntam freqüentemente: “Como atualizar a base de dados de maneira rápida e prática?”. Todos sabemos que desenvolver aplicações comerciais significa que, além de um sistema bem estruturado, uma base de dados confiável, estável e sólida são de suma importância.

Um dos elementos básicos, entre vários, pra ter isso, é trabalhar com um banco compatível com a aplicação. Significa que campos, tabelas e uma série de outros objetos devem existir na base do cliente exatamente igual a estrutura de desenvolvimento.

Ou seja, é no mínimo inadmissível que um campo programado pra receber determinado valor não exista no SGBD do cliente o que acarretaria um crash do sistema nas telas que o utilizam. Esse é apenas um dos por menores que podem ocorrer em um sistema incompatível com seu próprio bando de dados.

Esse é o assunto deste artigo. Vamos desenvolver, didaticamente, um atualizador automático usando patches.

Nota: Segundo o Wikipedia (pt.wikipedia.org/wiki/Patch) um patch é um programa de computador do sistema operacional UNIX que aplica as diferenças textuais entre dois programas e, mais freqüentemente, a arquivos de computador contendo essas diferenças, ou arquivos diff.

Bem, em nosso caso o patch será na verdade um arquivo de script renomeado de SQL para PATCH, o que não deixa de ser uma boa idéia, assim diferenciamos o arquivo de outros da pasta de instalação.

A ideia é que o desenvolvedor crie o patch da forma que achar mais conveniente. No meu dia a dia gosto de trabalhar com o IBExpert, pois desenvolvo minhas aplicações em Firebird. Rapidamente posso criar um script apenas extraindo o metadados do banco de testes e gerar o script. Após, envio para o cliente que utiliza alguma ferramenta que faça o processo inverso, como o IBConsole ou IBOConsole.

Essa não é uma boa prática, pois preciso forçar o cliente a ter um desses programas, instalado e configurado pra então executar a tarefas de atualizar o banco. Com nosso atualizador automático, podemos focar apenas em desenvolver o script correto para atualização do banco.

Então basta enviar os arquivos por e-mail ou desenvolver alguma ferramenta capaz de fazer o download dos patches de um servidor FTP o que tornaria o processo ainda menos dependente do usuário.

A classe TPatche

Para este artigo preparei a criação de uma classe capaz de receber o patch e executá-lo. Encapsuladamente conectamos ao servidor usando dbExpress e enviamos todos os comandos necessários para a execução de cada linha de comando encontrada no script.

A classe está preparada apenas para trabalhar com banco de dados IB/FB, mas pode ser facilmente portada pra outras bases como Oracle, MySQL entre outras. Outra coisa importante a falar, é que não serão permitidos comandos como criação de ...

Quer ler esse conteúdo completo? Tenha acesso completo