Não sei se foi pra melhor, mas organizei um pouco diferente:
Código: Selecionar todos
#include "jpa.ch"
FUNCTION ConverteGeral()
SayScroll()
SayScroll( "Verificando se há ajustes adicionais" )
DelTempFiles()
IF AppDatabase() != DATABASE_DBF
RETURN NIL
ENDIF
ConverteCriaMySql()
ConverteCriaDbf()
Converte20160101() // arquivos opcionais dbf/mysql
IF AppVersaoDbfAnt() < 20160829; Converte20160829(); ENDIF // bancario renomeado
IF AppVersaoDbfAnt() < 20160829; Converte20160830(); ENDIF // nome cidades mogi mirim e embu das artes
IF AppVersaoDbfAnt() < 20160829; Converte20160831(); ENDIF // antigos imgcopy
IF AppVersaoDbfAnt() < 20160829; Converte20160901(); ENDIF // aumento de campo em jpreguso
IF AppVersaoDbfAnt() < 20160905; Converte20160905(); ENDIF // JPEMISSOR eliminado
IF AppVersaoDbfAnt() < 20160907; Converte20160907(); ENDIF // jpnfbase
IF AppVersaoDbfAnt() < 20160908; Converte20160908(); ENDIF // jpedicfg
IF AppVersaoDbfAnt() < 20130601; RemoveSenhasDesativadas(); ENDIF
IF File( "rastrea.dbf" ) ; fErase( "rastrea.dbf" ) ; ENDIF
IF File( "rastrea.cdx" ) ; fErase( "rastrea.cdx" ) ; ENDIF
IF File( "jplicmov.dbf" ) ; fErase( "jplicmov.dbf" ) ; ENDIF
IF File( "jplicmov.cdx" ) ; fErase( "jplicmov.cdx" ) ; ENDIF
RETURN NIL
1 - Se for acesso via hbnetio, não tem direto a fazer atualização, mudança de estruturas, etc., entra direto no aplicativo.
2 - Cria as estruturas de MySQL, se precisar
3 - Cria/Atualiza as estruturas de DBF, se precisar
4 - Faz outras atualizações nas bases de dados
A última atualização foi esta:
Código: Selecionar todos
FUNCTION Converte20160908()
LOCAL lEof, cnMySql := AdoClass():New( AppcnMySqlLocal() )
IF File( "jpedicfg.cdx" )
fErase( "jpedicfg.cdx" )
ENDIF
IF AppcnMySqlLocal() != NIL
cnMySql:ExecuteCmd( "ALTER TABLE JPEDICFG MODIFY EDDESEDI VARCHAR(50) NOT NULL DEFAULT ''" )
ENDIF
IF File( "jpedicfg.dbf" )
SayScroll( "Somente em MySQL - JPEDICFG" )
JPEDICFGCreateDbf()
USE jpedicfg
lEof := ( LastRec() < 5 )
USE
IF ! lEof
CopyDbfToMySql( "JPEDICFG", .T. )
ENDIF
fErase( "jpedicfg.dbf" )
ENDIF
RETURN NIL
STATIC FUNCTION JPEDICFGCreateDbf()
LOCAL mStruOk
SayScroll( "JPEDICFG, verificando atualizações" )
mStruOk := { ;
{ "EDNUMLAN", "C", 6 }, ;
{ "EDTIPO", "C", 6 }, ;
{ "EDCODJPA", "C", 6 }, ;
{ "EDCODEDI1", "C", 20 }, ;
{ "EDCODEDI2", "C", 20 }, ;
{ "EDDESEDI", "C", 30 }, ;
{ "EDINFINC", "C", 80 }, ;
{ "EDINFALT", "C", 80 } }
IF ! ValidaStru( "JPEDICFG", mStruOk )
MsgStop( "JPEDICFG não disponível!" )
QUIT
ENDIF
RETURN NIL
Se tem MySQL, aumenta o campo ref. descrição.
Se tem conteúdo acima de 5 registros nesse arquivo de conversão JPEDICFG, transfere pra MySQL.
A partir desta versão, esse DBF não existe mais.
Quem não usou até agora, só usa se instalar MySQL.
Assim que instalar essa versão em todos os clientes, vou poder apagar a conversão.
O único lado ruim dessas coisas, de remover conversão, é que se algum dia precisar de um backup antigo, pode não vai funcionar mais.
Mas não sei em qual situação isso seria necessário.
Em breve vão acabar os "arquivinhos" de uso exclusivo.
Vai precisar de outro esquema de atualização pros demais.
Talvez eu acabe usando um simultâneo, gravando DBF + MySQL ao mesmo tempo.
A minha intenção é o cliente e eu podermos continuar trocando o programa todo dia e toda hora, sempre que precisar.
Então não dá pra esperar alterar 300 programas que mexem com clientes, por exemplo, pra poder trocar versão.
Acho que a gravação simultânea vai ser a melhor opção.