FoxPro/Visual FoxPro - creacion de un programa a red

 
Vista:

creacion de un programa a red

Publicado por jeny (34 intervenciones) el 15/11/2006 21:57:27
hola a todos ayuda porfavor urgente

mi problema es que desarrolle un sistema que permite realizar capturas, consultas y genera reportes, quiero convertir este sistema en red para que varios usuarios puedan accesar a el, al mismo tiempo ya sea ingresando nuevos registro, consultando o generando reportes,
la duda es eh creado una tabla la cual al cargar el sistema me permite direccionar hacia donde se encuentran las tablas , ya comparti mis tablas solo que en cada formulario cierro mis index y las tablas que esten abiertas y vuelvo a abrir las tablas y reindexar de nuevo de acuerdo a mis necesidades,de la siguiente manera
SET CONFIRM ON
SET SYSMENU OFF
CLOSE DATABASES
CLOSE INDEXES
SET DELETE ON
SET EXCLUSIVE ON
SET SAFETY OFF
set date British
set century on
set status OFF
CLOSE TABLES
set talk off
set cpdialog off

select 3
use ('&rut_tab'+'catrpa.dbf')SHARED
index on regrfcpro to catrpa1.cdx

select 2
use ('&rut_tab'+'conconbd.dbf') SHARED
index on numcom to conconbd1.cdx for numcom <> spac (6)

la pregunta es que al compartir mis tablas si alguien esta haciendo una consulta en un equipo con una tabla y otro usuario ingresara en otro equipo a la misma tabla, que pasaria con el usuario que abrio primero la tabla con el codigo de arriba se la cerraria el segundo usuario. si es asi tendria que abrir mis tablas una sola vez y reindexar tambien una sola vez .

y si tuviera un manual de redes en visual foxpro o explicarme un poco mas de como puedo convertir mi programa en red, ya que soy nueva en esto .

Gracias
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

RE:creacion de un programa a red

Publicado por luishoracio (25 intervenciones) el 15/11/2006 22:39:35
Buenas tardes jeny

Para que tu programa funcione en red primero debes de manejar las tablas maestras de la aplicación en forma compartida (shared) y las tablas que se generen en consultas deben ser cursores (tablas en memoria) o tablas que que creen en el disco duro de cada terminal.

Para lo que tu dices, las tablas se abren por cada usuario que entre a tu aplicación para eso se le coloca shared al final de la linea, para indexar debes de tener una rutina que antes de entrar a la aplicación por primera vez te ordene las tablas creandoles etiquetas para el ordenamiento, esto anterior si son las mismas tablas para todos los usuarios.

Si tienes alguna duda con gusto la atenderé

Hasta pronto!!
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:creacion de un programa a red

Publicado por Plinio (7841 intervenciones) el 16/11/2006 12:06:35
- Lo primero es cambiar ese SET EXLUSIVE ON por OFF
- Nunca reindexe dentro de tu aplicacion, pues eso requiere que la tabla este abierta como exclusiva
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:creacion de un programa a red

Publicado por Luighi (105 intervenciones) el 18/11/2006 09:31:05
bueno, espero poder ayudarte...
----
ciertas ordenes de foxpro necesitan que las tablas esten abiertas en modo exclusivo, tales como index, append, insert, pack, zap
en tu ejemplo, luego de hacer set exclusive on...
veo que abres un archivo de la siguiente manera:
use <archivo> shared
osea, lo abres en modo compartido, para luego hacer:
index ...
eso te lanzara error, pues foxpro no lo admite, ya que la tabla esta compartida
el comando index solo surte efecto si haces:
use <archivo> exclusive
o... estando set exclusive en on,......... solo haces: use archivo
sobreentendiendose asi que se abrio en modo exclusivo pues el comando set exclusive lo afecta, entonces luego haces: index ...
de esa manera se creara el indice
una recomendacion, intenta siempre crear el indice de la siguiente manera:
index on <clave> for <condicion> tag <etiqueta>
otra recomendacion mas, no es practico crear indices durante la ejecucion de un programa, pues a medida que la tabla crezca en registros, todo se hara mas lento. intenta siempre crear y definir los indexados durante el tiempo de diseño del programa, pues los mismos se acostumbra a hacer solo una vez y en tiempo de ejecucion tan solo hacemos uso de los mismos activandolos. ya sea con use <archivo> order <etiqueta>. o: use <archivo>. y luego: set order to <etiqueta>.
----
sobre el uso de las tablas al mismo tiempo en una red:
si un usuario entra a la rutina que mencionas, y en ese preciso momento desde otra pc otro usuario entra a la misma rutina, a este segundo usuario le va a salir el error: denegado el acceso a archivo.
este error suele ocurrir cuando una tabla se abrio en modo exclusivo en otra pc y si nosotros abrimos la misma tabla, a traves del programa, desde otra pc, nos va a salir siempre ese error pues haberlo abierto como exclusivo en otra parte, nos impide poder abrirlo desde otro lugar.
cuando programes en red debes tener en cuenta tres conocidas ordenes de foxpro: el comando: set reprocess, la funcion: flock(), y el comando: unlock.
lee un poco la ayuda sobre aquellas ordenes. con un ejemplo se podria entender mejor como es que funcionan:
****
set reprocess to 1
if flock('miarchivo') && intentando bloquear
*aqui haces todo lo que quieras hacer con ese archivo
else
wait 'hey tu amigo que estas en otra pc'+chr(13)+ ;
'no puedes hacer uso de esta rutina porque algunos archivos'+chr(13)+ ;
'que se usan aca estan en mantenimiento'+chr(13)+ ;
'intenta mas tarde o pregunta por ahi quien esta usando'+chr(13)+ ;
'esta opcion que quieres utilizar...' wind nowa
endif
unlock
****
en el ejemplo anterior: ser reprocess to 1 tiene mucho que ver con la funcion
flock(), flock() intenta bloquear el archivo 'miarchivo.dbf', si lo lo logra devuelve verdadero, sucede que cuando no lo logra vuelve a intentar bloquearlo las veces que quiera, eso va a depender de como hayamos configurado la orden set reprocess, y eso puede hacer que pensemos que el sistema se cuelga, para evitar eso, con set reprocess to 1 le decimos al sistema que cuando entre en accion flock(), intente bloquear el archivo solo una vez, en nuestro ejemplo al no lograrlo, mostrara el mensaje descrito arriba al usuario.
es recomendable tambien que set reprocess vaya definido apenas empiece el sistema y no a cada momento que se entre a la rutina.
y unlock tan solo desbloquea el archivo, solo cuando haya desbloqueado un archivo entonces recien estara disponible para que lo sigan usando en red.
----
bueno espero haberte ayudado un poco.
es importante que leas las ayudas sobre como trabajar en red.
pues realmente no es poco y tampoco mucho.
manos a la obra.
----
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