FoxPro/Visual FoxPro - Crear un programa ejecutable en red

 
Vista:
sin imagen de perfil

Crear un programa ejecutable en red

Publicado por Eduardo (2 intervenciones) el 17/03/2016 02:16:59
Estoy haciendo un proyecto en foxpro, es un sistema de votacion con una sola base de datos y queria saber lo siguiente:
1. Como hacer para que el campo numérico de cantidad de votos sume en uno cada vez que el postulante recibe un voto.
2. qué hay que hacer para que el programa se ejecute en todas las maquinas de la red y que cada voto sume en una sola base de datos?
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
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Crear un programa ejecutable en red

Publicado por Fidel José (657 intervenciones) el 17/03/2016 15:52:50
Y qué base de datos utilizas?
No dices que tienes una sola base de datos?
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

Crear un programa ejecutable en red

Publicado por Eduardo Flores (2 intervenciones) el 17/03/2016 23:00:03
Solo Es una tabla de Foxpro! con campos postulante y cantidad de votos.
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
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Crear un programa ejecutable en red

Publicado por Fidel José (657 intervenciones) el 18/03/2016 00:49:38
Bien, entonces no hay tal base de datos, sino solo una tabla.
Necesita dos elementos básicos para trabajar en red: Abrir las tablas en modo compartido y decidirte por un método de bloqueo.
Como no tengo la estructura de la tabla, la invento.

USE TABLA_VOTOS IN 0 SHARED
select Tabla_Votos
LOCATE FOR POSTULANTE == lcPostulante
IF FOUND()
IF RLOCK()
REPLACE Cant_Votos WITH Cant_Votos + 1
UNLOCK
ENDIF
ELSE
Messagebox("No se encuentra el postulante "+lcPostulante)
ENDIF
USE IN TABLA_VOTOS

Este método se conoce como bloqueo manual de registros.
Si la tabla debe seguir abierta, en lugar de USE IN .... va la instrucción FLUSH ó FLUSH IN TABLA_VOTOS

Para la búsqueda de postulantes, si la tabla tiene un índice por el campo Postulante, puedes utilizar las funciones SEEK() o INDEXSEEK() que son más rápidas que LOCATE.

Para asegurarte que abra siempre la misma tabla, debes tener una sola tabla accesible y aquí hay dos posibilidades (que las puedes utilizar en forma concurrente):
Al incio del programa, defines la ruta de acceso a la tabla

Si el Programa está Distribuido en cada equipo
lcPath = "\\cNombreServer\CarpetaCompartida"
Si no (se lee desde el servidor )
lcPath = ADDBS(SYS(5))+"CarpetaCompartida"

("carpeta compartida" puede ser una ruta: "Sistema\Datos" )

Recomendación: no te compliques utilizando nombres con espacio de ruta y carpeta compartida. Te obligará a utilizar encomillado y es un fastidio.

1) SET PATH TO &lcPath
* Cuando se necesite, abres la tabla sin indicar el path
USE TABLA_VOTOS IN 0 SHARED

2) Addproperty(_SCREEN,"Root" , lcPath ) && creas una propiedad de _Screen (que es pública)
* Cuando se necesite abrir la tabla
lcTabla = addbs(_SCREEN.ROOT) + "TABLA_VOTOS"
USE (lcTabla ) IN 0 SHARED

* También puedes resolver en una sola linea
USE ( ADDBS(_SCREEN.ROOT) + "TABLA_VOTOS" ) IN 0 SHARED
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar