FoxPro/Visual FoxPro - APlicacion en red

 
Vista:

APlicacion en red

Publicado por jeny (34 intervenciones) el 31/01/2007 20:40:20
Hola A todos

Porfavor necesito saber como emprezar a desarrollar una aplicacion en red, que necesito, no se si alguien tenga un manual que me pueda facilitar para poder convertir mi programa a red, tengo muchas dudas no se si alguien me podria aclarar esas dudas.

1. La primera duda que tengo es que al instalar mi programa de red en las maquinas que van a utilizar el sistema y sin las tablas y sin los index ya que estos estaran en la maquina de servidor, quiero saber si hasta ahi voy bien, instalo mi sistema y busco la maquina del servidor direccionando hacia este las tablas. eso es correcto o estoy mal.

2.Se que tengo que compartir mis tablas con shared para que dos usuarios puedan accesar a mi aplicacion. eso ya lo hice de la siguiente manera:

****en esta parte busco la ubicacion de las tablas
if Inicio_1=.f.
thisform.common1.dialogtitle='Seleccione Ubicacion de Tablas'
thisform.common1.filter='Tabla dbf (*.dbf)|*.dbf' && Ingresa solo archivos dbf
thisform.common1.flags= 8 &&& Regresa al directorio inicial
thisform.common1.initdir='c:\' &&& Establece el directorio de busqueda
thisform.common1.filename='conconbd.dbf' &&& Asigna el nombre al archivo
thisform.common1.action=1 &&& Abre la ventana de abrir
m_ruta=thisform.common1.filename
if len(alltrim(m_ruta))=0
BaseExis=.f.
return
else
m_ruta=left(thisform.common1.filename ,len( thisform.common1.filename)- len( thisform.common1.filetitle))
rut_tab=left(thisform.common1.filename ,len( thisform.common1.filename)- len( thisform.common1.filetitle))
m_ruta=m_ruta+"conconbd.dbf"
if file(m_ruta)
BaseExis=.t.
Inicio_1=.t.
select 1 &&& tabla ruta
replace ruta.miruta with rut_tab
READ EVENT
****comparto las tablas para usarlas en red
select 3 &&&&&&&&&Base de Contratistas &&&&&&&&&&&&&&&&
use ('&rut_tab'+'catrpa.dbf')SHARED
index on regrfcpro to catrpa1.cdx

3. La duda es como puedo controlar el acceso de los usuario al sistema para que el primero que entre realice el zap, y pack de las tablas que necesito. Hice algunas pruebas con USED pero lei por ahi que solo funciona de manera local y no en red no me funciono. no se si alguien me podria orientar para ver si voy bien en lo que estoy haciendo o de plano la estoy regando si es asi porfavor alguien tendria un manual o un pequeño proceso que me orientara.

Se los agradeceria mucho que me orientaran nunca eh hecho algo parecido es mi primera aplicacion que hago para red.

Esto lo necesitan en mi trabajo y por mas que he leido no se si voy bien o de plano ando perdida.

Necesito saber como puedo identificar que una tabla esta en uso para indexar o de lo contrario reindexar y saber o controlar la entrada y salida de los usuarios para cerrar las tablas

Ayudaaaaaaaaa.

Gracias espero respuestas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:APlicacion en red

Publicado por Carlos ACS (141 intervenciones) el 31/01/2007 22:18:22
El punto 1 esta bien...
el punto 2 es diferente a como yo lo trabajo, pero si te resulta bien, continua nomas.
en el punto 3 estas algo mal... en red solo se puede utilizar DELETE para las tablas y activar el SET DELETE ON para que tu sistema no tome en cuenta los registros marcados; y eso de reindexar solo se puede hacer con tabla abierta en forma exclusiva, es decir debes ser la unica que tiene abierta esa tabla mientras realizar la operacion...
por ultimo, si utilizas visual fox a partir de la version 7 ya no se necesita eso de reindexar, es automatico.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:APlicacion en red

Publicado por jeny (34 intervenciones) el 31/01/2007 23:45:40
Gracias por ubicarme realmente te lo agradesco Carlos.

Si en efecto en mi sistema que tengo para convertir a red le he puesto Delete para eliminar registros asi como lo sugeriste, mi sistema esta hecho en vfp 6.0 y en ocaciones reindexo, puesto que en mi formulario de Anticipos se realizan calculos de obra en un prg y luego cierro tablas, y vuelvo a indexar cada vez que se abre este formulario o alguien entra a esta pantalla para calcular el saldo de obra, la pregunta es como se si esta en uso una tabla en red?

lei por ahi que con used (tabla) indica y si esta en uso o no pero creo que solo funciona de forma local por aplicacion y en este caso yo utilizo varias tablas en diferentes pantallas creo que si logro adaptar una pantalla en este caso Anticipos podre sacar las demas en red.

Hay alguna otra opcion que me indique si una tabla ya ha sido abierta?

cuando probe con el used al inicio era asi

if used(anti.dbf)

do zapeo.prg
else
SELECT A && llAVE
use ('&rut_tab' +'llave.dbf') in A shared
do ('&rut_tab'+'comparte_tablas.prg')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:APlicacion en red

Publicado por jeny (34 intervenciones) el 31/01/2007 23:49:20
Gracias por ubicarme realmente te lo agradesco Carlos.

Si en efecto en mi sistema que tengo para convertir a red le he puesto Delete para eliminar registros asi como lo sugeriste, mi sistema esta hecho en vfp 6.0 y en ocaciones reindexo, puesto que en mi formulario de Anticipos se realizan calculos de obra en un prg y luego cierro tablas, y vuelvo a indexar cada vez que se abre este formulario o alguien entra a esta pantalla para calcular el saldo de obra, la pregunta es como se si esta en uso una tabla en red?

lei por ahi que con used (tabla) indica y si esta en uso o no pero creo que solo funciona de forma local por aplicacion y en este caso yo utilizo varias tablas en diferentes pantallas creo que si logro adaptar una pantalla en este caso Anticipos podre sacar las demas en red.

Hay alguna otra opcion que me indique si una tabla ya ha sido abierta?

cuando probe con el used al inicio era asi

if used(anti.dbf)
si el resultado era .t.
SELECT A && llAVE
use ('&rut_tab' +'llave.dbf') in A shared
do ('&rut_tab'+'comparte_tablas.prg') llama a los index set index anti1.cdx
else

do ('&rut_tab'+'zapeo.prg') dentro de este prg Hacia Pack,zap al algunas tablas abriendolas de modo exclusivo, al final hacia un close tables
y abri una tabla
endif
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:APlicacion en red

Publicado por jeny (34 intervenciones) el 31/01/2007 23:51:49
Gracias por ubicarme realmente te lo agradesco Carlos.

Si en efecto en mi sistema que tengo para convertir a red le he puesto Delete para eliminar registros asi como lo sugeriste, mi sistema esta hecho en vfp 6.0 y en ocaciones reindexo, puesto que en mi formulario de Anticipos se realizan calculos de obra en un prg y luego cierro tablas, y vuelvo a indexar cada vez que se abre este formulario o alguien entra a esta pantalla para calcular el saldo de obra, la pregunta es como se si esta en uso una tabla en red?

lei por ahi que con used (tabla) indica y si esta en uso o no pero creo que solo funciona de forma local por aplicacion y en este caso yo utilizo varias tablas en diferentes pantallas creo que si logro adaptar una pantalla en este caso Anticipos podre sacar las demas en red.

Hay alguna otra opcion que me indique si una tabla ya ha sido abierta?

cuando probe con el used al inicio era asi

if used(llave.dbf)
si el resultado era .t.
SELECT A && llAVE
use ('&rut_tab' +'llave.dbf') in A shared
do ('&rut_tab'+'comparte_tablas.prg') llama a los index set index anti1.cdx
else
si no estaba en uso
do ('&rut_tab'+'zapeo.prg') dentro de este prg Hacia Pack,zap al algunas tablas abriendolas de modo exclusivo, al final hacia un close tables
y abri una tabla

SELECT A && llAVE
use ('&rut_tab' +'llave.dbf') in A shared
do ('&rut_tab'+'comparte_tablas.prg') &&& en este prg compartia tablas shared
endif

asi los habi hecho pero no me funciona el used, tu como sabes si esta en uso alguna de tus tablas?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:APlicacion en red

Publicado por Luighi (105 intervenciones) el 01/02/2007 09:38:12
hola
programar en red requiere tener en cuenta una serie de cosas
si no es asi los resultados seran mas que inesperados
existen muchos manuales para aprender un poco mas sobre programacion en red bajo visual foxpro; sin embargo no siempre aportan como quisieramos
es alli donde es bueno entonces recurrir siempre a la experiencia

set exclusive
se usa generalmente en aplicaciones de red, permitiendonos mantener el control de nuestras tablas y su tratamiento
establecerlo antes que todo es muy importante y no en cada formulario
los objetivos en cuanto a los datos a tratar han de ser muy claros
ciertos comandos set no deben establercerse en los formularios, es decir, no es recomendable, esa no es la forma
establezcamos mejor:
set exclusive off
al principio de cualquier programa vfp es mas que suficiente para continuar con todo lo demas que queramos hacer en cuanto a las tablas, asi cuando iniciemos algun formulario el valor de set exclusive estara siempre en off
asi pues le decimos a vfp: oye, de ahora en adelante los archivos que abra no solo los podre abrir yo sino tambien los demas usuarios de la red y vfp comprendera perfectamente.
solo es una forma de hacer las cosas mas no es la definitiva
de esa manera al hacer:
use <archivo>
ya no sera necesario ponerle luego el shared cada vez que queramos abrir una tabla.
set exclusive off lo hace explicito para todas las tablas que se abriran
osea
estara abierto y a la vez cualquier otro usuario de la red tambien podra abrir ese mismo archivo sin ningun inconveniente

used()
todos sabemos que esta funcion nos dice si una tabla esta abierta o no
pero no es un funcion que sea util en red, solo es funcional en una sola pc
esta funcion jamas nos dira si una determinada tabla se abrio en una determinada pc, por lo tanto, para el caso, no es de utilidad

index, reindex, etc
una cosa es programar y otra programar correctamente
los datos finalmente son lo mas importante que todo sistema puede tener
y han de ser tratados con mucho cuidado y responsabilidad
los formularios deben ser ventanas hacia el tratamiento de datos, de gestion, de administrarlos, procesarlos
no es una buena practica reindexar la informacion a cada momento
ello solo ha de hacerse en una rutina de mantenimiento aparte
alguna opcion Mantenimiento de Tablas por ejemplo, eso depende de cada programador
para el caso solo basta activar los indices creados
use <archivo> order <EtiquetaDeIndice>

set deleted
los registros se borran siempre logicamente, es decir se marcan para su posterior borrado fisico, eliminarlo de la tabla
hacer:
set deleted on
oculta entonces los registros marcados como si realmente estuvieran borrados pero que realmente no lo estan
eso lo puedes establecer en un formulario sin problemas o quizas
en el prg principal, esto ultimo tambien es recomendable
no hay necesidad de hacer un pack o zap cada vez que entremos al sistema
debemos pensar siempre en la fluidez de la informacion y lo anterior, lo ralentiza y han de usarse convenientemente

pack, zap
mucho cuidado siempre con estas ordenes
ya que su ejecucion seran siempre irreversibles
el uso de estos comandos requiere que set exclusive este el valor on
eso complica un poco las cosas ya que si deseo entrar a una rutina que contiene estos comandos puedo ocasionar algun error
si estamos en red y queremos abrir el archivo compras para luego hacer un pack
hacemos:
use compras exclusive
que es lo mismo a hacer:
set exclusive on
use compras
tendremos el error: denegado el acceso a archivo
por lo tanto no podremos ejecutar el pack
ni el pack, ni el index, ni el reindex y mucho menos el zap
ya que estos comandos necesitan que el archivo no este siendo usado por ninguna otra pc por lo tanto deben ser cerrados y bloqueados

flock()
esta funcion es muy util en red
lo que hace es intentar bloquear un archivo o tabla, si lo logra, devolvera el valor verdadero y entonces podremos continuar y finalmente poder ejecutar los comandos mencionados en el parrafo anterior, como el pack, etc

ejemplo:

****
set exclusive off && esto no necesariamente debe estar aqui sino mucho antes
clos data
use ventas
if flock("ventas") && si el archivo no esta usandose en otra pc
*entonces flock() devolvera verdadero
pack && por lo tanto sucedera finalmente esto
else
wait "el archivo esta siendo usado por algun otro usuario, por lo tanto no es posible bloquearlo" wind nowait
endif
use
****

set reprocess
cuando vfp no puede bloquear una tabla, vuelve a intentarlo una y otra vez
eso hara parecer que el sistema se cuelga, inestabiliza
segun las necesidades ha de establecerse entonces este valor a:
set reprocess to 1
eso quiere decir un reintento, pueden ser 2, 3, etc
en el ejemplo anterior, si al usar flock() vfp no logra bloquear la tabla osea no devuelve verdadero, vfp no volvera a reintentar y continua a la siguiente orden
en el ejemplo anterior... a else

revisar la sintaxis y ejemplos de los dos ultimos comandos o funcion mencionados

entiendo que cada empresa y sistema tienen politicas claras de trabajo
pero podria recomendar que las operaciones de pack y zap no se hacen de esa manera, el primero que entre o salga, aquellas operaciones podria tomar muchos minutos e incomodar a los demas usuarios que quisieran tener acceso a los datos de inmediato, es bueno entonces administrar mejor las cosas, establecer horarios y rutinas de mantenimiento.

espero haber despejado duda alguna
seguiremos en contacto...

saludos desde peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:APlicacion en red

Publicado por jeny (34 intervenciones) el 01/02/2007 17:36:03
Gracias por la ayuda?

Pero la pregunta es esta como se cuando alguien esta usando cierta tabla, esa es la parte que no comprendi del todo bien el flock me permite saber eso?

Gracias

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:APlicacion en red

Publicado por Carlos ACS (141 intervenciones) el 01/02/2007 16:41:14
Prueba el OPENFILE(), haber si hay suerte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:APlicacion en red

Publicado por Ernesto Hernandez (4623 intervenciones) el 01/02/2007 18:08:10
Prueba el OPENFILE(), haber si hay suerte.

En donde puedo encontrar informacion de ese comando funcion o lo que sea ??????????????????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar