estava vendo alguns posts sobre macro, e reparei que eu uso muitas macros para abrir arquivos dbf, para ler arquivos .ini
vi alguns comentários que deve-se evitar ao máximo usar macros, Afinal qual a desvantagem de usa-las ?
segue algumas rotinas com uso de macros que utilizo.
função usada para abrir arquivos em modo shared ou exclusivo com varias macros &
FUNCTION NET_USE
PARAMETERS rA_CAM,rA_ARQ,rA_ALIAS,rL_MODO,rN_TIMEWAIT
PRIVATE rL_RETORNO
SAVE SCREEN TO rT_TELM2
//
DO WHILE .T.
IF rL_MODO = .T.
USE &rA_CAM\&rA_ARQ VIA "DBFCDX" ALIAS &rA_ALIAS EXCLUSIVE // Modo exclusivo
ELSE
TRY
USE &rA_CAM\&rA_ARQ VIA "DBFCDX" ALIAS &rA_ALIAS SHARED NEW // Modo nao exclusivo
CATCH
INKEY(3)
TRY
USE &rA_CAM\&rA_ARQ VIA "DBFCDX" ALIAS &rA_ALIAS SHARED NEW // Modo nao exclusivo
CATCH
ALERT2('VERMELHO','PROBLEMAS PARA ACESSAR{'+rA_ARQ+'}, O SISTEMA SERA ENCERRADO.')
CLOSE DATA
QUIT
END
END
ENDIF
//
IF NETERR()
MENNEW('CORADV','','Arquivo &rA_ALIAS em uso, aguardando liberaçâo, ESC cancela ')
ELSE
rL_RETORNO=.T.
EXIT
ENDIF
INKEY(rN_TIMEWAIT)
RESTORE SCREEN FROM rT_TELM2
IF LASTKEY() = 27
rL_RETORNO=.F.
MENNEW('CORADV','','Arquivo &rA_ALIAS em uso, aguardando liberaçâo, ESC cancela ')
CLOSE DATA // EVITA QUE QUANDO DER EM USO DEIXE ALGUM ARQUIVO ABERTO
EXIT
ENDIF
ENDDO
RETURN rL_RETORNO
para abrir o dbf e o indice uso assim: (tambem utilizo macro &)
SELECT 0
IF !NET_USE(pA_CAM,'PACOTE','PACOTE',.T.,pN_TIMEWAIT)
RETURN
ENDIF
SET INDEX TO &pA_CAM\PACOTCDX
SET ORDER TO 2
outro exemplo é para ler arquivos .ini que não estão na pasta local
pA_CSYSTEMB="arquivos\cores.ini"
rA_CORLETRA=LEINI([cor impressao],[cor],[&pA_CSYSTEMB])