[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