simulacion sys() en harbour
24/03/2010
Ya encontre porque el sistema se detenia, el algoritmo anterior
basado en sys() trae de vuelta el path del sistema de forma precisa,
es decir sin caracteres en blanco , la rutina que cree, agrega
caracteres al fin, para llenar el campo nombre en el archivo de
almacenamiento home.txt, al hacer la comprobacion desde luego no
coincidian basto colocar trim() en los puntos se se hace el home y listo
rutina original
--------------------------------------------------------------------------
store at(":",HOME) + 1 to i
store len(HOME) to l
store "" to Usr_Tmp
do while i <= l store substr(HOME,i,1) to Caracter store chr(asc(Caracter) + 100) to Caracter1 store Usr_Tmp + Caracter1 to Usr_Tmp store i+1 to i enddo Select 10 use &Emp_Arch alias Empresa goto top locate for at(trim(Usr_Tmp),USUARIO) <> 0
if eof()
clear
do Usuario
quit
endif
-------------------------------------------------------------------------
observece los trim en la quedo al final, se retiro ,
store at(":",HOME) + 1 to i y se remplazo por store 1 to i ya que no
es necesario en esta version del sys()
El while hace un sencillo encriptamiento paa que no sea trivial
orientado a disuadir a usuarios "gomosos" de los sistemas que
quieren instalar empresas en el sistema, queda pendiente usar [*] crypt() de
XHarbopur, FlagShip no tenia encriptador propio
-------------------------------------------------------------------------
rutina final
store 1 to i
store len(trim(HOME)) to l
store "" to Usr_Tmp
do while i <= l store substr(trim(HOME),i,1) to Caracter store chr(asc(Caracter) + 100) to Caracter1 store Usr_Tmp + Caracter1 to Usr_Tmp store i+1 to i enddo Select 10 use &Emp_Arch alias Empresa goto top locate for at(Usr_Tmp,USUARIO) <> 0
if eof()
clear
do Usuario
quit
endif
--------------------------------------------------------------------------
El sistema presento problemas con los indeces, muetra que los mismos
estan corruptos, los indices de FlagShip son IFX, los de xharbour por
defecto son NDX, me toca borrar todos los archivos y reconstruirlos,
se presento en problema , en FlagShip, al borrarlos index el sistema
los crea automaticamtne, en xharbour , muestra error y no me deja
seguir tengo que buscar como hacer para detectar este problema antes
de que ocurra [*], pues lo normal es que como se ejecute en sistemas ya
instalados, se presente de nuevo el error y hacer todos los procesos de
ignorar y crear manualmente seria engorroso, este proceso año a año,
desde el 1998 ha la fecha , tengo un cliente que tiene 70 empresas en
un servidor, seria muy largo de hacer, tengo que encontrar como
resolver este inconveniete como lo hace FlagShip.
Estoy pensando en begin sequence /errorHandler pero tengo que
estudiarlo pues en FlagShip estas instruccines se usan para manejar
eventos nop se si xaharbour les da un tratamiento similar, me parece
que es mas parecido al try/catch del java [*]
Corri una rutina de test , sencilla que elabore para verificar cuanto
es la relacion de maquina a maquina y por terminales y se lo aplique a
xharbour, la relacion fue de 29/51 (29 xharbour y 59 FlagShip) un
desempeño del 56%, NOTABLE.
IMPORTANTE:
en el comando de compilacion:
harbour -D__EXPORT__ -l -m -n0 -go @sos2 1>error.log
debe quitar la -l, durante el proceso de depuracion y debe quedar asi
harbour -D__EXPORT__ -m -n0 -go @sos2 1>error.log
o sino , cuando el sistema falle no se sabe en que linea esta el
error.
Si al compilar el sistema pasa ropidamente y usted ha usado el
guion de compilacion de esta bitacora, busque el archivo error.log, al
final le indicar el error que hizo que el sistema no terminara el
proceso.
Si no encuenta el error alli le sugiero que ejecute los siguientes
comandos
# script cac
# ./compila
# exit
# less cac
este proceso inicial el trazador de comandos de linux script con
archivo de salida cac,./compila es el guion que desarrolle para
compilar la apliacion en Xharbour, exit sale del guion y con less cac
muestra cual fue el error.
El uso de close database y close index que yo uso tan alegremente en
mis programas generan un error si el sistema previamente no tenia nada
abierto, yo lo hacia para asegurarme antes de cualquier operacion de que
no hubiera archivos innecesrios abiertos, pero Xharbour, no permite
este proceso me toco quitar los close index , ya que close databases
cierra todo y cuando close data index se ejecuta ya encuentra todo
cerrado, y genera error, toca borrar estas instrucciones
La instrucion via "DBFIDX" , tan usado en Foxpro para el uso de base
de datos, genera error de apertura en XHarbour, toco elminarla.
se retiro la instruccion setprc(prow(),0) propia del FlagShip para
crear fin linea y se sejo el clasico chr13
Ya encontre porque el sistema se detenia, el algoritmo anterior
basado en sys() trae de vuelta el path del sistema de forma precisa,
es decir sin caracteres en blanco , la rutina que cree, agrega
caracteres al fin, para llenar el campo nombre en el archivo de
almacenamiento home.txt, al hacer la comprobacion desde luego no
coincidian basto colocar trim() en los puntos se se hace el home y listo
rutina original
--------------------------------------------------------------------------
store at(":",HOME) + 1 to i
store len(HOME) to l
store "" to Usr_Tmp
do while i <= l store substr(HOME,i,1) to Caracter store chr(asc(Caracter) + 100) to Caracter1 store Usr_Tmp + Caracter1 to Usr_Tmp store i+1 to i enddo Select 10 use &Emp_Arch alias Empresa goto top locate for at(trim(Usr_Tmp),USUARIO) <> 0
if eof()
clear
do Usuario
quit
endif
-------------------------------------------------------------------------
observece los trim en la quedo al final, se retiro ,
store at(":",HOME) + 1 to i y se remplazo por store 1 to i ya que no
es necesario en esta version del sys()
El while hace un sencillo encriptamiento paa que no sea trivial
orientado a disuadir a usuarios "gomosos" de los sistemas que
quieren instalar empresas en el sistema, queda pendiente usar [*] crypt() de
XHarbopur, FlagShip no tenia encriptador propio
-------------------------------------------------------------------------
rutina final
store 1 to i
store len(trim(HOME)) to l
store "" to Usr_Tmp
do while i <= l store substr(trim(HOME),i,1) to Caracter store chr(asc(Caracter) + 100) to Caracter1 store Usr_Tmp + Caracter1 to Usr_Tmp store i+1 to i enddo Select 10 use &Emp_Arch alias Empresa goto top locate for at(Usr_Tmp,USUARIO) <> 0
if eof()
clear
do Usuario
quit
endif
--------------------------------------------------------------------------
El sistema presento problemas con los indeces, muetra que los mismos
estan corruptos, los indices de FlagShip son IFX, los de xharbour por
defecto son NDX, me toca borrar todos los archivos y reconstruirlos,
se presento en problema , en FlagShip, al borrarlos index el sistema
los crea automaticamtne, en xharbour , muestra error y no me deja
seguir tengo que buscar como hacer para detectar este problema antes
de que ocurra [*], pues lo normal es que como se ejecute en sistemas ya
instalados, se presente de nuevo el error y hacer todos los procesos de
ignorar y crear manualmente seria engorroso, este proceso año a año,
desde el 1998 ha la fecha , tengo un cliente que tiene 70 empresas en
un servidor, seria muy largo de hacer, tengo que encontrar como
resolver este inconveniete como lo hace FlagShip.
Estoy pensando en begin sequence /errorHandler pero tengo que
estudiarlo pues en FlagShip estas instruccines se usan para manejar
eventos nop se si xaharbour les da un tratamiento similar, me parece
que es mas parecido al try/catch del java [*]
Corri una rutina de test , sencilla que elabore para verificar cuanto
es la relacion de maquina a maquina y por terminales y se lo aplique a
xharbour, la relacion fue de 29/51 (29 xharbour y 59 FlagShip) un
desempeño del 56%, NOTABLE.
IMPORTANTE:
en el comando de compilacion:
harbour -D__EXPORT__ -l -m -n0 -go @sos2 1>error.log
debe quitar la -l, durante el proceso de depuracion y debe quedar asi
harbour -D__EXPORT__ -m -n0 -go @sos2 1>error.log
o sino , cuando el sistema falle no se sabe en que linea esta el
error.
Si al compilar el sistema pasa ropidamente y usted ha usado el
guion de compilacion de esta bitacora, busque el archivo error.log, al
final le indicar el error que hizo que el sistema no terminara el
proceso.
Si no encuenta el error alli le sugiero que ejecute los siguientes
comandos
# script cac
# ./compila
# exit
# less cac
este proceso inicial el trazador de comandos de linux script con
archivo de salida cac,./compila es el guion que desarrolle para
compilar la apliacion en Xharbour, exit sale del guion y con less cac
muestra cual fue el error.
El uso de close database y close index que yo uso tan alegremente en
mis programas generan un error si el sistema previamente no tenia nada
abierto, yo lo hacia para asegurarme antes de cualquier operacion de que
no hubiera archivos innecesrios abiertos, pero Xharbour, no permite
este proceso me toco quitar los close index , ya que close databases
cierra todo y cuando close data index se ejecuta ya encuentra todo
cerrado, y genera error, toca borrar estas instrucciones
La instrucion via "DBFIDX" , tan usado en Foxpro para el uso de base
de datos, genera error de apertura en XHarbour, toco elminarla.
se retiro la instruccion setprc(prow(),0) propia del FlagShip para
crear fin linea y se sejo el clasico chr13
Comentarios
Publicar un comentario