>>*** define local variables >>LOCAL lnFiles, laFiles, lnI, ; >> lnTables, laTables, lnJ, ; >> lnExists, laExists, lnK, ; >> lcOldDeleted, lcOldSafety >> >>DIMENSION laFiles[1], laTables[1], laExists[1] >> >> >>*** look for the stage 1 0 byte flag file >>lnFiles = ADIR(laFiles, "FreshInstallation.flg") >> >>IF lnFiles > 0 >> *** check for tables in Data dir >> lnFiles = ADIR(laFiles, "Data\*.dbf") >> >> IF lnFiles > 0 >> *** existing tables means that there may be existing data >> WAIT WINDOW "Reinstall Detected, Converting Data, Please wait ..." NOWAIT >> >> >> *** create if required the temporary dir >> lnFiles = ADIR(laFiles, "Trashcan", "D") >> >> IF lnFiles = 0 >> MD Trashcan >> ENDIF >> >> >> CD Trashcan >> >> >> *** empty trashcan >> lnFiles = ADIR(laFiles, "*.*") >> >> FOR lnI = 1 TO lnFiles >> DELETE FILE (laFiles[lnI, 1]) >> ENDFOR >> >> >> *** copy to trashcan the vsodbcx generated prg sets >> lnFiles = ADIR(laFiles, "..\Data\ReGenDBC*.*") >> >> FOR lnI = 1 TO lnFiles >> COPY FILE ("..\Data\" + laFiles[lnI, 1]) TO (laFiles[lnI, 1]) >> ENDFOR >> >> >> *** execute in trashcan the vsodbcx generated prgs to get a clean copy of the dbcs >> lnFiles = ADIR(laFiles, "ReGenDBC*.prg") >> >> = ASORT(laFiles) >> >> FOR lnI = 1 TO lnFiles >> DO (laFiles[lnI, 1]) WITH , .T. >> ENDFOR >> >> >> lcOldDeleted = SET("DELETED") >> >> SET DELETED OFF >> >> >> *** find out the dbcs >> lnFiles = ADIR(laFiles, "*.dbc") >> >> FOR lnI = 1 TO lnFiles >> *** open each dbc >> OPEN DATABASE (laFiles[lnI, 1]) EXCLUSIVE >> >> >> *** get all the table names for the dbc >> lnTables = ADBOBJECTS(laTables, "TABLE") >> >> FOR lnJ = 1 TO lnTables >> *** open each table >> IF USED(laTables[lnJ]) >> SELECT (laTables[lnJ]) >> ELSE >> USE (laTables[lnJ]) >> ENDIF >> >> >> *** if exists a same name table in data dir apped data from it >> lnExists = ADIR(laExists, "..\Data\" + laTables[lnJ] + ".dbf") >> >> IF lnExists > 0 >> APPEND FROM ("..\Data\" + laTables[lnJ]) >> ENDIF >> >> >> *** close each table >> USE >> ENDFOR >> >> >> *** close each dbc >> CLOSE DATABASE >> ENDFOR >> >> >> SET DELETED &lcOldDeleted. >> >> >> CD.. >> >> >> *** create stage 2 flag file >> = FCLOSE(FCREATE("FreshConversion.flg")) >> ELSE >> *** no existing tables means that only the vsodbcx generated prgs are there >> *** from the installation >> WAIT WINDOW "Fresh Install Detected, Creating Data, Please wait ..." NOWAIT >> >> >> *** execute here the vsodbcx generated prgs to get a clean copy of the dbcs >> CD DATA >> >> lnFiles = ADIR(laFiles, "ReGenDBC*.prg") >> >> = ASORT(laFiles) >> >> FOR lnI = 1 TO lnFiles >> DO (laFiles[lnI, 1]) WITH , .T. >> ENDFOR >> >> CD .. >> >> >> *** execute here the vsodbcx generated prgs to get a clean copy of the dbcs >> CD Security >> >> lnFiles = ADIR(laFiles, "ReGenDBC*.prg") >> >> = ASORT(laFiles) >> >> FOR lnI = 1 TO lnFiles >> DO (laFiles[lnI, 1]) WITH , .T. >> ENDFOR >> >> CD.. >> ENDIF >> >> >> *** clean up >> CLOSE TABLES ALL >> CLOSE DATABASES ALL >> >> >> *** remove the stage 1 flag file >> DELETE FILE FreshInstallation.flg >> >> >> WAIT CLEAR >>ENDIF >> >> >>*** look for the stage 2 0 byte flag file >>lnFiles = ADIR(laFiles, "FreshConversion.flg") >> >>IF lnFiles > 0 >> *** data conversion is now complete >> WAIT WINDOW "Fresh Conversion Detected, Moving Converted Data, Please wait ..." NOWAIT >> >> >> *** create if required the temporary dir >> *** this should be here anyways but can't predict better safe the error out >> lnFiles = ADIR(laFiles, "Trashcan", "D") >> >> IF lnFiles = 0 >> MD Trashcan >> ENDIF >> >> >> CD Trashcan >> >> >> lcOldSafety = SET("SAFETY") >> >> SET SAFETY OFF >> >> >> *** find out each and every file in trashcan >> lnFiles = ADIR(laFiles, "*.*") >> >> FOR lnI = 1 TO lnFiles >> IF laFiles[lnI, 1] # "REGENDBC" >> *** delete any file which does not belong to vsodbcx generated prg sets >> *** it seems they are open when they are last run >> COPY FILE (laFiles[lnI, 1]) TO ("..\Data\" + laFiles[lnI, 1]) >> DELETE FILE (laFiles[lnI, 1]) >> ENDIF >> ENDFOR >> >> >> SET SAFETY &lcOldSafety. >> >> >> CD.. >> >> >> *** remove the stage 2 flag file >> DELETE FILE FreshConversion.flg >> >> >> WAIT CLEAR >>ENDIF >>