Atualizar Banco de Dados MySQL pelo Delphi - Fórum DevMedia
Atualizar Banco de Dados MySQL pelo Delphi
Amigos, utilizo o MySQL com Delphi 2010 e estou quebrando a cabeça para desenvolver algo que faça atualização do banco de dados. As vezes, conforme a evolução da aplicação, é necessário acrescentar um campo ou uma tabela novos e estou sem a minima noção de como fazer isso com a aplicação já no cliente e em produção sem perder os dados do cliente. Se alguém puder ajudar-me ficarei grato.
Olá Savio, não é apenas criar campos/tabelas, mas geralmente existem executáveis e outros arquivos. Outro porem é nos programas que são em rede, ou seja, possuem diversos usuários utilizando o software, se você atualizar quando um dos usuários solicitar, os demais usuários podem estar executando processos que podem sofrer interferencia com a execução de scripts, qual é o seu cenário ?
Você pode desenvolver um rotina que irá pegar os comandos SQL e atualizar o banco de dados. Caso utilize DbExpress posso te mandar um exemplo.
Exatamente na criação de uma rotina que pegue e gere os scripts para a atualização do banco que estou penando, Rafael. Uso Zeos, mas ficaria agradecido se puder enviar-me um exemplo, ainda que com DBExpres, posso fazer uma adaptação. Meu e-mail: saviomarques6@gmail.com
Você quer pegar os scripts SQL de um arquivo, por exemplo, e rodar no banco de dados é isso mesmo que entendi?
é interessante que quando for desenvolvida
a rotina de atualização do Banco.
Os scripts, sejam rodados pós horário de produção.
Para não impactar a base.
São Varias etapas, é um projeto grande mas vou te ajudar por partes.
1. Como o sistema vai verificar se existe uma nova versão.
voce deve possuir um local que o sistema consulte qual a ultima versão.
2. Como o sistema irá baixar os arquivos da atualização.
para baixar pode ser feito via ftp por exemplo, cuidado, pois se um usuário que esta em uma versão,
que não seja a anterior, ele deve executar as atualizações das versões intermediarias.
3. Descompactar os arquivos caso estajam descompactados.
Arquivos compactados ficam menores para o download e caso exista varios arquivos teria que baixar uma por um.
4. Caso seja um usuário será apenas pergunta-lo se deseja atualizar.
em um sistema de apenas um usuário a atualização fica mais simples, pois terá problema de outros usuários
utilizando processos que sofrerão mudança.
5. Para multiusuário eu imagino que a melhor opção é criar um agendamento para xx hora e avisar quando estiver chegando e fechar o sistema.
em um sistema com varios usuarios se a atualização for no momento que baixar os arquivos,
pode danificar processos em execução. é o ponto mais complicado pois não deve haver usuários logados,
então deve ser verificado e fechado se estiver aberto, e caso tente se conectar deve ser impedido de logar.
6. Os scripts serão criptografados qual criptografia usar.
caso queria dar maior segurança voce pode deixar seus scripts criptografados.
7. Os scripts podem estar contidos em um arquivo texto que você criou, você pode apenas ler e copiar para um query e executar.
ex: voce pode criar um script normal igual voce usa na sua query, create table... e vai gerando o script
dando versoes a ele, como script_000001.sql, todos ou a maioria deve estar contidos nas atualizações, motivo
se houver um cliente na versão 10 e a atual esta na 15, ele nao tera os scripts 11,12,13,14. deixando o mesmo
sem scripts necessarios para funcionamento da aplicação.
8. Substituir executáveis, imagens, dlls, relatórios, entre outros arquivos dos sistema.
aqui pode gerar erros se algum arquivo estiver em uso, o mesmo pode impedir a substituição.
Obrigado Douglas e forma especial a Bruno, pelas dicas importantíssimas. Visando não pesar o executável da aplicação seria interessante criar um executável a parte essencialmente voltado a atualizar o banco, né. Caro Rafael, é exatamente isso que você entendeu a minha dúvida.
Agora estou no trabalho, assim que chegar em casa te passo o código que possui utilizando DBExpress e Firebird.