Um problema em alterar aplicativo existente é que nem sempre dá tempo de alterar tudo de uma vez.
A boa notÃcia é que dá pra fazer por etapas, um pouco de cada vez.
A má notÃcia, é que num determinado momento, é tudo de uma vez, e depende dos fontes pra facilitar.
Uma coisa que uso há muito tempo é uma rotina pra abrir arquivos.
Ao invés de colocar em todo fonte
USE cliente
SET INDEX TO cliente1, cliente2, cliente3
USE produto
SET INDEX TO produto1, produto2, produto3
Dá pra simplificar usando uma função;
IF ! AbreArquivos( "cliente", "produto" )
RETURN
ENDIF
E na função, abre os arquivos e Ãndices.
Isso também ajuda a abrir sempre todos os Ãndices, e na ordem certa.
Também ajuda a colocar mais checagens/testes pra ver se deu problema na abertura.
Uma função do Harbour pode facilitar isso.
FUNCTION AbreArquivos( ... )
LOCAL cDBF, lTudoCerto := .T.
aList := hb_AParams()
FOR EACH cDBF IN aList
lTudoCerto := AbreUmDBF( cDBF )
IF ! lTudoCerto
EXIT
ENDIF
NEXT
IF ! lTudoCerto
CLOSE DATABASES
Mensagem( "Não conseguiu abrir todos" )
ENDIF
RETURN lTudoCerto
Função relativamente simples, recebe uma lista, e testa se conseguiu abrir cada um.
Uma coisa interessante é: se não conseguiu, já fecha tudo, já que não adianta com arquivo faltando.
Agora a função pra abrir um arquivo....
Essa cada um vai ajustar para as rotinas que tem hoje.
É só um exemplo.
FUNCTION AbreUmArquivo( cDBF )
cDBF := Lower( cDBF )
DO CASE
CASE cDBF == "cliente"
USE cliente
SET INDEX TO cliente1, cliente2, cliente3
CASE cDBF == "produto"
USE produto
SET INDEX TO produto1, produto2, produto3
OTHERWISE
RETURN .F.
ENDCASE
RETURN .T.
Acima só uma rotina básica como exemplo.
O único teste é ver se o nome está na lista.
Pode acrescentar teste se arquivo existe, se Ãndice existe, se deu problema de abertura, etc.
Facilita porque depois, pra trocar pra CDX, basta alterar essa rotina.
Nota: Lógico, tem gente que já usa esquema desse tipo há muito tempo, mas tem gente que ainda não.