Pois é...
Eu sempre posto aqui que primeiro precisa organizar tudo antes de partir pra mudanças, e fiz o oposto kkkk
A próxima versão:
Apagando do MySQL
:ExecuteCmd( "DROP TABLE IF EXISTS BA_AUTO" )
:ExecuteCmd( "DROP TABLE IF EXISTS BA_GRUP" )
:ExecuteCmd( "DROP TABLE IF EXISTS BA_MOVI" )
:ExecuteCmd( "DROP TABLE IF EXISTS CTDIARI" )
:ExecuteCmd( "DROP TABLE IF EXISTS CTHISTO" )
:ExecuteCmd( "DROP TABLE IF EXISTS CTLOTES" )
:ExecuteCmd( "DROP TABLE IF EXISTS CTLANCA" )
:ExecuteCmd( "DROP TABLE IF EXISTS CTPLANO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPANPMOV" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPBAMOVI" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPBARRA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPCADAS" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPCLISTA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPCOMISS" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPDOLAR" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPEMPRE" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPESTOQ" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPFINAN" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPFINANC" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPFORPAG" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPIMPOS" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPITEM" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPITPED" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPLFISC" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPLOGNFE" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPMDFCAB" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPMDFDET" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPMOTORI" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPNOTA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPNUMERO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPPEDI" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPPEDIDO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPPRECO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPPRONCM" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPREFCTA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPSENHA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPAGE" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPATI" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPINS" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPLOC" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPOPE" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABEL" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTRANSA" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTRANSP" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPUF" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPUSRMSG" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPVENDED" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPVEICUL" )
:ExecuteCmd( "DROP TABLE IF EXISTS RASTREA" )
e apagando de DBF:
LOCAL cFile, aList := { ;
"ba_auto.dbf", ;
"ba_grup.dbf", ;
"ba_movi.dbf", ;
"jpanpage.dbf", ;
"jpanpins.dbf", ;
"jpanpope.dbf", ;
"jpbarra.dbf", ;
"jpcarcor.dbf", ;
"jpcep.dbf", ;
"jpcfop.dbf", ;
"jpcotaca.dbf", ;
"jpcotcli.dbf", ;
"jpcotfor.dbf", ;
"jpcotpro.dbf", ;
"jpcte.dbf", ;
"jpdecret.dbf", ;
"jpdecret.cdx", ;
"jpdocrel.dbf", ;
"jpdocrel .dbf", ; // criou errado
"jpedicfg.dbf", ;
"jpfisica.dbf", ;
"jpibpt.dbf", ;
"jplicmov.dbf", ;
"jplogsi.dbf", ;
"jpnfbase.dbf", ;
"jpnfeger.dbf", ;
"jpnfexml.dbf", ;
"jpnotaca.dbf", ;
"jpordbar.dbf", ;
"jpordres.dbf", ;
"jpordser.dbf", ;
"jpprehis.dbf", ;
"jppromix.dbf", ;
"jpromcab.dbf", ;
"jpromdet.dbf", ;
"jptexto.dbf", ;
"jpvvdem.dbf", ;
"jpvvfin.dbf", ;
"nfbase.dbf", ;
"rastrea.dbf" }
FOR EACH cFile IN aList
IF File( cFile )
fErase( cFile )
ENDIF
NEXT
aList := Directory( "tmp*.dbf" )
FOR EACH cFile IN aList
fErase( cFile[ F_NAME ] )
NEXT
IF ! AppConexao() == NIL
IF File( "jpreguso.dbf" )
fErase( "jpreguso.dbf" )
ENDIF
ENDIF
Na prática restaram alguns clientes com DBF de aplicativo especÃfico.
Pra esses, que não tem MySQL, o log do aplicativo continua em DBF.
Para os DBFs, comparei as pastas das empresas.
#include "directry.ch"
#include "inkey.ch"
PROCEDURE Main
LOCAL aList := {}, cPath, aDbfList, oDbf, nPos, oFile
CLS
FOR EACH cPath IN ;
{ "assesor", "carbolub", "cicuto", "cordeiro", "crispetrol", ;
"dricar", "gargantua", "locafacil", "lubrivan", "maringa", ;
"peaton", "toppetro", "unifila", "waripaer" }
aDBFList := Directory( "d:\jpa\" + cPath + "\*.dbf" )
FOR EACH oDBF IN aDBFList
IF ( nPos := ASCan( aList, { | e | e[ 1 ] == Upper( oDBF[ F_NAME ] ) } ) ) == 0
AAdd( aList, { Upper( oDBF[ F_NAME ] ), 0, "" } )
nPos := Len( aList )
ENDIF
aList[ nPos, 2 ] += 1
aList[ nPos, 3 ] += cPath + ","
NEXT
NEXT
FOR EACH oFile IN aList
IF oFile[ 2 ] != 14
? oFile[ 1 ], oFile[ 2 ], oFile[ 3 ]
ENDIF
NEXT
? "Fim"
Inkey(0)
RETURN
Agora fazer algo parecido pra comparar as bases MySQL, pra ver se tem lixo em alguma.
Como é o mesmo aplicativo em todas, mesmo que não usem tudo, pelo menos tem que existir as mesmas bases em DBF e MySQL.
No geral, conversões que eu tinha deixado preparado, ou módulos desativados que não apaguei arquivos antes.
Pois é... agora seguindo meus próprios conselhos de organizar tudo primeiro kkkk
E como a versão apaga até tabelas do MySQL...
Talvez obrigar a troca de versão primeiro. em todos, e depois retirar tudo isso de apagar do MySQL, já que vão entrar tabelas oficiais depois.