[firebase-br] Ajuda com Script
Tecnobyte Informática
temp2 em tecnobyte.com.br
Qui Maio 19 15:16:45 -03 2011
Boa tarde
O que expliquei é praticamente tudo que faço. Vou passar mais alguns
detalhes que possa ajudar (uso Delphi e IBX).
*** VERSÃO DO BANCO DE DADOS ***
Tenho no banco de dados uma tabela CONFIG, que possui dois campos como
abaixo:
CREATE TABLE Config(
Nome VARCHAR(50),
Valor VARCHAR(250)
...
);
Nesta tabela gravo configurações em geral, dentre as quais tenho uma
configuração chamada "VersaoBancoDados". Inicialmente gravo isto abaixo:
INSERT INTO Config(Nome, Valor) VALUES('VersaoBancoDados', 0);
*** ARQUIVO DE SCRIPTS ***
Construí um aplicativo que cria um ClientDataSet com a estrutura abaixo:
...
ClientDataSet1.FieldDefs.Clear;
ClientDataSet1.FieldDefs.Add('Versao', ftInteger);
ClientDataSet1.FieldDefs.Add('Script', ftMemo);
ClientDataSet1.CreateDataSet;
...
Neste aplicativo tenho uma tela que serve para cadastrar os scripts neste
ClientDataSet.
...
Para salvar:
ClientDataSet1.SaveToFile('C:\Diretorio\Update.dat');
*** VERIFICAÇÃO E ATUALIZAÇÃO ***
Na inicialização do aplicativo executo os seguintes passos:
1. Pego a versão do banco de dados que está grava na tabela CONFIG, usando
este SELECT:
SELECT Valor FROM Config WHERE Nome = 'VersaoBancoDados'
2. Abro o arquivo de script (uso um ClientDataSet para carregar o arquivo).
ClientDataSet1.LoadFromFile('C:\Diretorio\Update.dat');
3. Filtro o ClientDataSet para obter somente os scripts cujo número de
versão é maior que aquele obtido da tabela CONFIG.
ClientDataSet1.IndexFieldNames := 'Versao';
ClientDataSet1.SetRange([VersaoAtual+1], [MaxInt]);
...
4. Faço um loop pelo ClientDataSet1 (já filtrado) e executo cada script
usando o comando IBScript do IBX. A cada script executado com sucesso, gravo
a versão deste na tabela CONFIG:
{ Executa script... }
...
{ Grava versão do script executado --- somente se não deu erro! }
UPDATE CONFIG SET Valor = :Valor WHERE Nome = 'VersaoBancoDados'
É mais ou menos assim.
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
-----Mensagem Original-----
From: Marcelo Carvalho
Sent: Thursday, May 19, 2011 11:07 AM
To: FireBase
Subject: Re: [firebase-br] Ajuda com Script
Daniel,
Pode me dar mais informações sobre sua forma de atualização?
--
Atenciosamente,
*Marcelo Carvalho*
MSN *carvalho826 em hotmail.com*
*
*
2011/5/19 Tecnobyte Informática <temp2 em tecnobyte.com.br>
> Bom dia
>
> Uso o esquema descrito abaixo para atualizar a base de dados no cliente.
>
> 1. Gravo no banco de dados o número de versão da estrutura do banco de
> dados.
>
> 2. Tenho uma tabela criada com ClientDataSet que contém os scripts
> (comandos) juntamente com o número da versão.
>
> 3. Quando o sistema inicia, abro a tabela de scripts no ClientDataSet e
> executo todos os scripts cujo número de versão é maior que o número
> gravado
> no banco de dados.
>
>
> *** EXEMPLO ***
>
> Versão ZERO - Banco de dados inicial
>
> ------- Versão 1 -------
>
> CREATE TABLE Teste...
> ALTER TABLE Seila...
>
> ------- Versão 2 -------
>
> UPDATE Teste SET ...
> DELETE FROM Seila WHERE ...
> CREATE SEQUENCE ...
>
> ------- Versão 3 -------
>
> etc, etc, etc
>
> ------- *** -------
>
> Se ao iniciar a aplicação for verificado que no banco de dados está
> gravado
> "Versão 1", então tenho que executar os scripts a partir da versão 2 para
> que o banco de dados seja atualizado corretamente.
>
> Para evitar erros como "Object in use" e outros problemas, entre um
> script
> e outro eu desconecto e conecto ao banco novamente. Além disso, não
> misturo
> comandos DDL (create, alter, etc) com DML (insert, update, delete) no
> mesmo
> script, pois isto evita problemas com transações.
>
> CUIDADO! É muito importante que o arquivo de scripts seja criptografado ou
> protegido de alguma forma para evitar que alguém adicione comandos
> manualmente, o que poderia ser desastroso.
>
> Atenciosamente.
>
> Daniel P. Guimarães
> Tecnobyte Informática
> www.tecnobyte.com.br
>
> -----Mensagem Original----- From: Marcelo Carvalho
> Sent: Thursday, May 19, 2011 9:42 AM
> To: FireBase
> Subject: [firebase-br] Ajuda com Script
>
>
> Bom Dia,
>
> Como posso automatizar a execução de script na base do cliente?
> Hoje eu envio para o cliente um instalador, que vai atualizar o
> executável,
> e também um script para ser executado na base do cliente.
> Só que preciso estar na frente do micro, mesmo que seja remoto, para poder
> executar esse script.
> Eu queria mandar tudo pronto neste instalador.
> Atualiza-se o executável e rodaria esse script.
>
> Como fazer?
> Quem poderá me ajudar?
>
> --
> Atenciosamente,
>
> *Marcelo Carvalho*
> MSN *carvalho826 em hotmail.com*
>
Mais detalhes sobre a lista de discussão lista