No meu aplicativo tenho lá a estrutura do DBF.
Ao carregar o sistema, ele verifica se a estrutura está ok.
Então, agora acrescente o campo do CEST nos produtos:
{ "IECEST", "C", 8 }, ;
Pronto, quando o cliente atualizar versão, vai ser criado o campo no arquivo DBF.
E não é só isso, no programa principal tenho lá a versão dos DBFs:
AppVersaoDbf( 20151105 )
Quando o cliente atualizar versão, se esse número for diferente do que ele usa, ao executar pela primeira vez, isso faz com que o aplicativo saiba que haverá mudança de estrutura.
Então o aplicativo primeiro "expulsa" os usuários do aplicativo, pra poder fazer o backup e depois atualizar estrutura.
Enquanto não conseguir fazer isso, ninguém mais usa o aplicativo.
Então faz backup, atualiza estrutura (já eliminando Ãndices do arquivo modificado), e já cria os Ãndices para garantir que se existem novos Ãndices em novos campos, já sejam criados.
No MySQL já comecei a criar esse tipo de coisa, mas não tão flexÃvel quanto as rotinas pra DBF.
Isso facilita muito.
Nada de mexer ou ajustar DBF em cliente manualmente.
É atualizar versão e tudo é ajustado automaticamente.
Comecei com isso quando tinha vários aplicativos diferentes, cada cliente com o seu.
Cada cliente com estrutura de arquivo diferente, telas de cadastro diferentes, etc.
Agrupei todos os EXEs em um, agrupei definições de estrutura, coloquei essa atualização automática.
Com o tempo, fui padronizando todos.
Deixava para o aplicativo modificar estruturas, fazer conversões aonde necessário, etc.
Até mesmo se precisar liberar uma opção pra determinado usuário, de determinada empresa, consigo acrescentar para o aplicativo fazer automático.
Isso resume tudo a falar para o cliente: atualize o aplicativo e já fica resolvido.
Lógico, já aconteceram imprevistos no passado.
Quando isso ocorreu, bastou utilizar o backup que o sistema havia feito.
E já alterar nos fontes para que não acontecesse novamente.
Lembro de uma única vez onde a estrutura no EXE foi problema:
Era um 486 SX, com problemas de mau contato, e o EXE se alterava ao ser carregado, considerando estruturas diferentes, e convertia sem precisar, modificando estruturas.
Esse tipo de coisa não se esquece...
Chamou a atenção o monitor piscando, então parecia normal, um monitor com problema.
Na prática era a placa mãe do computador com problema que fazia o monitor piscar.
Já não lembro em que ano foi, mas 486 SX é de muito tempo atrás.
Nesse caso, foi só retornar o backup que o aplicativo fez antes de atualizar.
De lá pra cá, já não lembro mais quando precisei de um backup.
Mas isso continua sendo feito.