Crear un programa ejecutable en red
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