nombre de las bases de datos en harbour (fspreset.fh de flagship no existe)
22/03/2010
para ejecutar el archivo conta.out le doy simplemente ./conta.out
observece el punto y el slash al principio para ubicarlo en el
diretorio de creacion.
Bueno ejecute el comando y el sistema marco un error de que el archivo
Cnf_Cvr.dbf no fue encontrado, busque por todas partes de mi apliacion
y efectivamente el archivo si estaba, pero el sistema no lo encontraba
aparecia como cnf_cvr.dbf, la sospecha fue, xharbour es case sensitive
al nombre de los archivos. y cambie mi archivo por Cnf_Cvr.dbf como
esta escrito en el programa,y el sistema presento la pantalla de
bienvenida de mi programa.
Problema el FlagShip tiene un comando que se llama
# include "fspreset.fh"
que resuelve este inconveniente, por eso no fui muy cuidadoso en el nombre
los archivos, ahora tengo un monton de modulos que hacen uso de
archivos con todas las conbinaciones posibles de los nombres de
archivos.
Toca cambiar todos los nombres, pues auqnque busque en clipper y
harbour no existe nada parecido o por lo menos no lo encontre a lo que
tiene FlagShip.
Cree entonces un guion para cambiar de forma simultanea todas las
tablas, es engorroso pues tengo que darle cada una de las tablas
de forma independiente, pero afortuandamente no son sino 15 en mi caso
Podria hacerse una tabla y que el sistema lo fuera leyendo en un
while pero en mi caso creo que las pruebas y demas son mas demoradas
que hacer el remplazo manual, despues de todo ya lo hice y me tomo solo
30 minutos.
El programa para cambiar las tablas lo hice en FlagShip.
****************************************************************************
* Guion para cambiar nomnbres de archivos
****************************************************************************
set excl off
set safety off
run rm *.sos
run fgrep -y 'cnf_cvr' *.prg > cac.txt
select 1
use salida1 exclusive
zap
append from cac.txt SDF
select SALIDA1
delete for trim(camprosa) = "guion.prg"
replace all camprosa with left(camprosa,at(":",camprosa)-1)
replace all sale with left(camprosa,at("prg",camprosa)-1)
replace all sale with trim(sale) + "sos"
select 1
use salida1 alias salida
index on camprosa to cac unique
copy to SOS
select 1
use SOS alias SALIDA
goto top
do while .not. eof()
store trim(Camprosa) to Entrada
store trim(Sale) to Salida
run sed 's/Cnf_Cvr/cnf_cvr/' &Entrada > &Salida
skip
enddo
select SALIDA
goto top
do while .not. eof()
store trim(Camprosa) to Entrada
store trim(Sale) to Salida
run cp &Salida &Entrada
skip
enddo
run rm *.sos
--------------------------------------------------------------------------
volvi a hbmake y siguindo los pasos de darle todo por defecto, volvio
a compilar y efectivamente no funciuno, ahora tenemos otro error que
el compilador no marco en ninguno de los casos, en FlagShip y en
foxpro para determinar el directorio donde esta un ubicado se hace
muy facil :
FlagShip
[*] store sys(2003) to HOME
en Foxpro
store sys(5) to HOME
en XHarbour no encontre estos comandos y despues de buscar un buen rato
decidi hacer una pequeña rutina que me sacara del paso, pues intente
con __dir, directory() y no me funciono como yo lo esperaba
*******************************************************************
* rutina determinacion del directorio de trabajo bajo Linux,Unix *
*******************************************************************
run pwd > ./tmp/home.txt
select 1
use director exclusive
zap
append from './tmp/home.txt' SDF
store trim(NOMBRE) to HOME
simplemente hago uso del comando run para ejecutar macros desde el
sistema operativo, invoco el comando pwd:
pwd
/home/ksos/conta
que me dice en que directorio estoy como se ve arriba , guardo esto
en un archivo texto, home.txt y lo importa a una base de datos
director.dbf local, con el comando SDF y listo, ahora puedo leer el
directorio en que estoy ubicado desde la variable NOMBRE del archivo
director.dbf
Nota: EL trim() en la final de la rutina lo agree posterirmente,
despues de darme cuenta que la rutina agregaba espacio en blanco que
dificultaban el ingeso al sistema, vease el dia 24/03/2010.
Vuelvo a compilar , el proceso afortunadamente en mi computador es
muy rapdio, todo el sistema en 2 minutos, hago la prueba y ok.
Ya me permite entrar la clave de acceso.
El sistema de instalacion muestra un reporte de que el sistema
contable necesita ser actualizado para esto tengo dos procesos que
actualizan tanto el sistema como las bases de datos, necesito entonces
poner a funcionar estas dos rutinas antes de continuar para poder
saber que esta pasando , una se llama encript u la otra actual.
Hago el mismo proceso para ambas , similar a el de conta , creo un
directorio con todos los modulos que hacen parte de esta rutina y
proceso a compilar, el sistma compilo y encadeno correctamente pero al
ejecutarlo mostro un error, que dice que la funcion sys(3) no esta
definida,
esta funcion la uso para crear archivos temporales aleatorios, pero en
xharbour no existe , implemento una rutina , probablemente no se muy
elegante pero funciono correctamente, esta basada en extraer la
informacion del dia y hora del sistema con los comandos date() y
time(), separar los campos por valores y obtener el valor asc de este
valor restado de la constante 122 (z) minuscula como ningun valor es
mayor de 59 todos los valres quedan el rango ascII correcto.
aqui una copia de el procedimiento sys03.prg que remplaza a sys(03)
eventualmente con mas tiempo desarrolle una rutina mas elegante, pero
ahora la cosa es de tiempo y esta funciona correctamente.
*****************************************************************
* Esta rutina simula la generacion de nombres aleatorios de *
* sys(03) *
*****************************************************************
procedure sys03
parameters nombreRnd
set century on
set date british
store dtoc(date()) to fecha
store time() to hora
* 122 es valor ascII para la z que toma como valor superior
* ahora hay que evitar que la diferencia de algunos valores
* llegue a estar por debajo de 97 que es el valor para la a
store (122-val(substr(fecha,1,2))) to ddN
store (122-val(substr(fecha,4,2))) to meN
store (122-val(substr(fecha,7,2))) to aaN
store (122-val(substr(hora,1,2))) to hhN
store (122-val(substr(hora,4,2))) to mmN
store (122-val(substr(hora,7,2))) to ssN
* Se garantiza que el valor sea una letra valida *
if (ddN < 97)
store 120 to ddN
endif
if (meN < 97)
store 121 to meN
endif
if (aaN < 97)
store 120 to aaN
endif
if (hhN < 97)
store 97 to hhN
endif
if (mmN < 97)
store 98 to mmN
endif
if (ssN < 97)
store 99 to ssN
endif
store chr(ddN) to dd
store chr(meN) to me
store chr(aaN) to aa
store chr(hhN) to hh
store chr(mmN) to mm
store chr(ssN) to ss
store dd+me+aa+hh+hh+mm+ss to nombreRnd
store lower(nombreRnd) to nombreRnd
return
------------------------------------------------------------------
para ejecutar el archivo conta.out le doy simplemente ./conta.out
observece el punto y el slash al principio para ubicarlo en el
diretorio de creacion.
Bueno ejecute el comando y el sistema marco un error de que el archivo
Cnf_Cvr.dbf no fue encontrado, busque por todas partes de mi apliacion
y efectivamente el archivo si estaba, pero el sistema no lo encontraba
aparecia como cnf_cvr.dbf, la sospecha fue, xharbour es case sensitive
al nombre de los archivos. y cambie mi archivo por Cnf_Cvr.dbf como
esta escrito en el programa,y el sistema presento la pantalla de
bienvenida de mi programa.
Problema el FlagShip tiene un comando que se llama
# include "fspreset.fh"
que resuelve este inconveniente, por eso no fui muy cuidadoso en el nombre
los archivos, ahora tengo un monton de modulos que hacen uso de
archivos con todas las conbinaciones posibles de los nombres de
archivos.
Toca cambiar todos los nombres, pues auqnque busque en clipper y
harbour no existe nada parecido o por lo menos no lo encontre a lo que
tiene FlagShip.
Cree entonces un guion para cambiar de forma simultanea todas las
tablas, es engorroso pues tengo que darle cada una de las tablas
de forma independiente, pero afortuandamente no son sino 15 en mi caso
Podria hacerse una tabla y que el sistema lo fuera leyendo en un
while pero en mi caso creo que las pruebas y demas son mas demoradas
que hacer el remplazo manual, despues de todo ya lo hice y me tomo solo
30 minutos.
El programa para cambiar las tablas lo hice en FlagShip.
****************************************************************************
* Guion para cambiar nomnbres de archivos
****************************************************************************
set excl off
set safety off
run rm *.sos
run fgrep -y 'cnf_cvr' *.prg > cac.txt
select 1
use salida1 exclusive
zap
append from cac.txt SDF
select SALIDA1
delete for trim(camprosa) = "guion.prg"
replace all camprosa with left(camprosa,at(":",camprosa)-1)
replace all sale with left(camprosa,at("prg",camprosa)-1)
replace all sale with trim(sale) + "sos"
select 1
use salida1 alias salida
index on camprosa to cac unique
copy to SOS
select 1
use SOS alias SALIDA
goto top
do while .not. eof()
store trim(Camprosa) to Entrada
store trim(Sale) to Salida
run sed 's/Cnf_Cvr/cnf_cvr/' &Entrada > &Salida
skip
enddo
select SALIDA
goto top
do while .not. eof()
store trim(Camprosa) to Entrada
store trim(Sale) to Salida
run cp &Salida &Entrada
skip
enddo
run rm *.sos
--------------------------------------------------------------------------
volvi a hbmake y siguindo los pasos de darle todo por defecto, volvio
a compilar y efectivamente no funciuno, ahora tenemos otro error que
el compilador no marco en ninguno de los casos, en FlagShip y en
foxpro para determinar el directorio donde esta un ubicado se hace
muy facil :
FlagShip
[*] store sys(2003) to HOME
en Foxpro
store sys(5) to HOME
en XHarbour no encontre estos comandos y despues de buscar un buen rato
decidi hacer una pequeña rutina que me sacara del paso, pues intente
con __dir, directory() y no me funciono como yo lo esperaba
*******************************************************************
* rutina determinacion del directorio de trabajo bajo Linux,Unix *
*******************************************************************
run pwd > ./tmp/home.txt
select 1
use director exclusive
zap
append from './tmp/home.txt' SDF
store trim(NOMBRE) to HOME
simplemente hago uso del comando run para ejecutar macros desde el
sistema operativo, invoco el comando pwd:
pwd
/home/ksos/conta
que me dice en que directorio estoy como se ve arriba , guardo esto
en un archivo texto, home.txt y lo importa a una base de datos
director.dbf local, con el comando SDF y listo, ahora puedo leer el
directorio en que estoy ubicado desde la variable NOMBRE del archivo
director.dbf
Nota: EL trim() en la final de la rutina lo agree posterirmente,
despues de darme cuenta que la rutina agregaba espacio en blanco que
dificultaban el ingeso al sistema, vease el dia 24/03/2010.
Vuelvo a compilar , el proceso afortunadamente en mi computador es
muy rapdio, todo el sistema en 2 minutos, hago la prueba y ok.
Ya me permite entrar la clave de acceso.
El sistema de instalacion muestra un reporte de que el sistema
contable necesita ser actualizado para esto tengo dos procesos que
actualizan tanto el sistema como las bases de datos, necesito entonces
poner a funcionar estas dos rutinas antes de continuar para poder
saber que esta pasando , una se llama encript u la otra actual.
Hago el mismo proceso para ambas , similar a el de conta , creo un
directorio con todos los modulos que hacen parte de esta rutina y
proceso a compilar, el sistma compilo y encadeno correctamente pero al
ejecutarlo mostro un error, que dice que la funcion sys(3) no esta
definida,
esta funcion la uso para crear archivos temporales aleatorios, pero en
xharbour no existe , implemento una rutina , probablemente no se muy
elegante pero funciono correctamente, esta basada en extraer la
informacion del dia y hora del sistema con los comandos date() y
time(), separar los campos por valores y obtener el valor asc de este
valor restado de la constante 122 (z) minuscula como ningun valor es
mayor de 59 todos los valres quedan el rango ascII correcto.
aqui una copia de el procedimiento sys03.prg que remplaza a sys(03)
eventualmente con mas tiempo desarrolle una rutina mas elegante, pero
ahora la cosa es de tiempo y esta funciona correctamente.
*****************************************************************
* Esta rutina simula la generacion de nombres aleatorios de *
* sys(03) *
*****************************************************************
procedure sys03
parameters nombreRnd
set century on
set date british
store dtoc(date()) to fecha
store time() to hora
* 122 es valor ascII para la z que toma como valor superior
* ahora hay que evitar que la diferencia de algunos valores
* llegue a estar por debajo de 97 que es el valor para la a
store (122-val(substr(fecha,1,2))) to ddN
store (122-val(substr(fecha,4,2))) to meN
store (122-val(substr(fecha,7,2))) to aaN
store (122-val(substr(hora,1,2))) to hhN
store (122-val(substr(hora,4,2))) to mmN
store (122-val(substr(hora,7,2))) to ssN
* Se garantiza que el valor sea una letra valida *
if (ddN < 97)
store 120 to ddN
endif
if (meN < 97)
store 121 to meN
endif
if (aaN < 97)
store 120 to aaN
endif
if (hhN < 97)
store 97 to hhN
endif
if (mmN < 97)
store 98 to mmN
endif
if (ssN < 97)
store 99 to ssN
endif
store chr(ddN) to dd
store chr(meN) to me
store chr(aaN) to aa
store chr(hhN) to hh
store chr(mmN) to mm
store chr(ssN) to ss
store dd+me+aa+hh+hh+mm+ss to nombreRnd
store lower(nombreRnd) to nombreRnd
return
------------------------------------------------------------------
Comentarios
Publicar un comentario