Page 1 of 1

Alias

Posted: Mon May 24, 2021 9:06 am
by Sebastián Almirón
Hola a todos, recientemente he actualizado FW,Harbour,C Borland... desde una versión antigua (la 13.8), y tengo un problema que supongo que a alguno le habrá pasado.

Tengo una aplicación multiempresa, en el que los nombres de las dbfs están repetidos dentro de la carpeta de cada empresa. En algunos procesos necesito abrir dbfs con el mismo nombre pero de distinta carpeta, pero algo ha cambiado que ahora no puedo darle un alias tal y como lo hacía antes, algo así:

Code: Select all | Expand

   for x = 1 to len(aempresas)
        cvarcli := dirutaexe()+'\EMP'+aempresas[x,1]+'\database\cliruta'
        caliascli := 'cliruta'+aempresas[x,1]
        use &cvarcli shared new alias &caliascli
        sele &caliascli
        set order to 1

esto en versiones anteriores me funcionaba, con la nueva en la línea del sele, me dice que no existe el alias
¿Ya no se puede indicar un alias mediante &alias?

Saludos

Re: Alias

Posted: Mon May 24, 2021 9:15 am
by hmpaquito
Hola,

Recomiento encarecidamente el uso de paréntesis en vez del operador macroexpansion & que es más lento en ejecucion.

Asi es mejor práctica poner

Code: Select all | Expand


USE (cVarCli) SHARED NEW ALIAS (cAliasCli)
SELECT (cAliasCli)
 


Con respecto al asunto de fondo, USE es un comando standard de Harbour y no creo que fivewin lo haya renombrado.
Me inclino porque el problema esté en tu código y podría ser este:

Es una mala practica poner directamente USE, es mejor usar Net_Use() para que informe si no se puede abrir una bb.dd. Asi pudo ocurrir que (cAliasCli) estuviera abierta en otro proceso / usuario y no la abriera, luego el comando SELECT falló

Así el código más correcto sería:

Code: Select all | Expand

SELECT 0
IF !Net_Use(cVarCli, .f., 5, cAliasCli)
   mMsgInfo("No se pudo abrir !!", cVarCli)
   RETURN NIL
ENDIF
SELECT (cAliasCli)
...
 
Saludos

Re: Alias

Posted: Mon May 24, 2021 9:52 am
by Sebastián Almirón
hmpaquito wrote:Hola,

Recomiento encarecidamente el uso de paréntesis en vez del operador macroexpansion & que es más lento en ejecucion.

Asi es mejor práctica poner

Code: Select all | Expand


USE (cVarCli) SHARED NEW ALIAS (cAliasCli)
SELECT (cAliasCli)
 


Con respecto al asunto de fondo, USE es un comando standard de Harbour y no creo que fivewin lo haya renombrado.
Me inclino porque el problema esté en tu código y podría ser este:

Es una mala practica poner directamente USE, es mejor usar Net_Use() para que informe si no se puede abrir una bb.dd. Asi pudo ocurrir que (cAliasCli) estuviera abierta en otro proceso / usuario y no la abriera, luego el comando SELECT falló

Así el código más correcto sería:

Code: Select all | Expand

SELECT 0
IF !Net_Use(cVarCli, .f., 5, cAliasCli)
   mMsgInfo("No se pudo abrir !!", cVarCli)
   RETURN NIL
ENDIF
SELECT (cAliasCli)
...
 
Saludos


Gracias, solucionado, efectivamente tenía una dbf abierta con Foxpro y no me había dado cuenta (es lunes y aun no ando concentrado :oops: )