Desenvolvemos
para nosso sistema um método que automaticamente verifica se os DBFs
tiveram alteração de estrutura e ajusta os arquivos para a nova
estrutura. O conceito é o seguinte :
1. Você define
todas as estruturas de todos os arquivos os quais seu sistema irá
manipular.
2. Você cria
uma função que retorne essa estrutura. No nosso caso, GetStru()
3. Ao subir o
sistema, você pega cada estrutura dos arquivos - com dbstruct() por
exemplo - e a estrutura definida internamente no seu sistema.
4. Você
compara as duas estruturas - no nosso caso, com CmpStru()
5. Se forem
iguais, está tudo OK e você retorna.
6. Se
diferentes - qualquer diferença que não alteração de tipo de campo (pois
neste caso poderá ser gerado um erro com os comandos utilizados nesta
função ) , você deverá :
6.1 Gravar um
arquivo novo com os dados atuais.
6.2 Comparar
os dados gravados com os atuais.
6.3 Apagar o
atual e criar o novo com a nova estrutura.
6.4 Appendar
os dados do arquivo gravado
6.5 Comparar
os dados appendados com os gravados originalmente.
7. Fim do
Processo.
Algumas
proteções são colocadas :
1. Ao começar
uma revisão , o sistema cria o Arquivo VERSION.DAT . Se algum outro
terminal tentar subir o programa e, se encontrar este arquivo, significa
que :
1.1 Algum
terminal está fazendo revisão e eu não posso subir agora.
1.2 Alguém
(talvez eu mesmo) estava fazendo revisão de sistema e o sistema caiu ,
ou a máquina caiu, parou a força, etc...
Em qualquer
caso, deve haver duas opções, Você entrar e continua Revisão ou Desiste
de subir no programa para subir mais tarde.
2. Conforme
começar a revisão, todos os arquivos de índice associados ao arquivo
serão apagados o sistema deve ter mecanismos de criá-los automaticamente
sempre que for abrir um arquivo.
3. Se sistema
caiu fazendo revisão, através do estado do arquivo de back-up gravado,
ele saberá em que ponto parou e o que fazer para não perder dados.
4. Uma
variável global, associada preferencialmente a algum campo de um arquivo
de configuração do sistema, indicará se pode ou não haver checagem ou
não de integridade de DBFs e NTX.
Envio arquivo
anexo com as funções descritas neste documento. Espero que possa ser
útil a alguém.