Redes...

Gracias por tu apoyo, tengo otras pequeñas dudas, sobre todo en redes:
a)Tengo que zapear o darle un zap a una tabla, que habro de manera exclusiva : use mitabla exclusive
, porque deshabilite el
"set exclusive off" esto es para trabajar con archivos compartidos entre varios usuarios o en redes, usando el lock() y el unlock().
Mis preguntas son:
--Si existe otra manera de abrir en exclusiva una tabla, ya que al abrirla como te lo mencione me cierra todas las tablas ya abiertas, se que las puedo abrir nuevamente, pero me gustaría saber si estoy haciendo lo correcto o tengo otra opción para hacerlo.
--Esta misma tabla la uso para generar un reporte, ahí se filtra y se manipula la información, que tengo que hacer cuando más de un usuario quiera generar el reporte, ya que la tabla esta siendo abierta de manera exclusiva o que opciones tengo para llevar a cabo este proceso.
-- Que cambios debo hacer para que un sistema trabaje en red, ya leí acerca de eso, y también cambie ciertas cosas en mi sistema, pero me gustaría saber la opinión de alguien que tiene experiencia en eso, para poder elegir bien la manera de trabajar.
Muchas gracias por tu ayuda...

2 Respuestas

Respuesta
1
Al abrir un archivo en forma exclusiva, no debe cerrarse ningún otro archivo, no importa como haya sido abierto. Cerciorate de abrir el archivo en un área libre, puedes usar: use archivo exclu in 0, o escribir primero un se le 0 y luego el use.
De como abrir el archivo en forma exclusiva que no sea con un USE, solo que activaras en tu formulario el Data Environment pero te limita un poquito, mejor sigue utilizando el Use.
Si quieres utilizar una tabla especifica como archivo temporal para crear reportes, yo te recomiendo que mejor crees un "Cursor". Un cursor, es un archivo temporal que vfox borra cuando lo cierras. Asígnale un nombre de archivo aleatorio para que no entre en conflicto con otros usuarios, o crea el cursor en el disco del usuario. Yo utilizo la siguiente función para obtener nombres aleatorios para mis archivos:
function tempFile && para crear archivos temporales
param mExt
private mdir
mdir=gete('TEMP')
if len(mdir)=0
mdir=gete('TMP')
endif
if len(mdir)>0
if directory(mdir)
if subs(mdir,len(mdir),1)<>'\'
mdir=mdir+'\'
endif
else
mdir=''
endif
endif
return mdir+SUBSTR(SYS(2015), 3, 10)+'.'+iif(type('mext')='C',mext,'tmp')
y lo uso asi:
mfile=Tempfile()
o
mfile=tempFile('txt')
en el primer caso, me devuelve un archivo .tmp y en el segundo, un archivo .txt
Puedo hacer dos cosas; crear un cursor de la siguiente forma:
create cursor datos ;
( codigo c(4),;
nombre c(40) )
minde=TempFile()
inde on codigo to (minde)
o crear una tabla asi:
mfile=tempfile()
minde=tempfile()
create table (mfile) ;
( codigo c(4),;
Nombre c(40))
Use (mfile) alias datos exclu in 0
Se le datos
Inde on codigo to (minde)
Y listo.
Al salir, selecciono el "datos", le doy un USE para cerrarlo, y luego borro los temporales:
Erase (mfile)
Erase (minde)
Espero te sirva
Si tengo que indexarlo, hago lo siguiente:
minde=tempfile()
Se le datos
Inde on codigo to (minde)
Al salir
Respuesta
1
No existe otra manera recuerda que al hacer zap a una tabla la estas limpiando completamente, y esto afecta el indice (si lo tiene) y al actualizar el indice se esta metiendo con un archivo de la BD, por lo tanto toda la BD se debe comportar de acuerdo a esto.
Para lo anterior yo no emplearía una tabla lo que yo haría es una consulta
select ___ from___ INTO CURSO XXX
En el cursor XXX ya esta la información y no tienes que esta haciendo ZAP. Y dependiendo de el tiempo de instalación afecta a cada usuario(si todos están pegados a un mismo ejecutable pued haber problema de lo contrario no).
Yo recomiendo el desarrollo con ODBC o con ADO cualquiera de las dos ya son suficientemente maduras y se han corregido muchos problemas en estas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas