Programacion Multiusuario VFP 9.0

630 views
Skip to first unread message

Integral

unread,
Oct 6, 2014, 11:35:51 PM10/6/14
to mundovis...@googlegroups.com
Estimados Amigos :

Me piden que realice un sistema en modo Multiusuario usando tablas libres del VFP

Estuve buscando información al respecto y la verdad luego de leer algunos artículos termine confundido y con ciertas dudas...

Leo un articulo que decía. En la programación Multiusuario hay que tener muy en cuenta el control de la 
zona critica. En VisualFoxpro, esto se puede hacer Automáticamente o Manualmente.

¿Qué se requiere?
Se requiere definir algunas variables de ambiente en el programa principal de nuestro Sistema.
Como abrir las tablas en modo compartido.

Me podrían orientar sobre el tema y la forma mas eficiente de trabajar con las tablas libres en una Unidad de Red (G:\)

Agradezco sus comentarios y sugerencias.

Saludos,

INTEGRAL

Carlos Miguel FARIAS

unread,
Oct 7, 2014, 7:01:14 AM10/7/14
to mundovisualfoxpro
Estimado Integral:
Independientemente de que uses dbfs o un SGBD para tu sistema, trata de que todos los accesos a los datos se hagan con comandos SQL, y ajustandote al estandar en lo más posible (VFP 9 se ajusta bastante al estandar).
O sea que para borrar datos, usa el DELETE FROM (la condición WHERE debe trabajar sobre claves primarias), el agregado de datos haslo con INSERT INTO, los cambios con UPDATE (con la misma indicación que para DELETE) y para el proceso de datos en general, accede con SELECT, si usas una clave primaria para acceder, obtienes un cursor de una linea, si necesitas llenar una grilla, direcciona el SELECT a un CURSOR y sobre él monta la grilla.
De esa manera, si luego quieres migrar el sistema a algún SGBD externo, solo debes cambiar los USE Tabla por una conexión al SGBD (SQLConnect) y envolver tus sentencias SQL (con algunos retoques) en SQLExec y tienes tu sistema montado en un SGBD.
Y si a futuro quieres migrar a otro lenguaje de programación, te llevas tus sentencias SQL, adaptas el modo de invocarlas al otro lenguaje ( no muy diferente a lo que haces con las SQLalgo de Fox) y tienes tu sistema en otro lenguaje.
Por supuesto, la base de datos debe estar bien normalizada.
Por supuesto, el sistema tiene que tener bien fijada su funcionalidad básica.
Y en el caso de multiusuario con DBFs, tal como te dijeron, utiliza tablas compartidas.
Y si vas por dicha senda, en entregas subsiguientes, la comunidad podrá orientarte en los ajustes para evitar los problemas normales (y no imposibles de tratar) de la concurrencia múltiple, que es más fácil de lo que la pintan.
Saludos: Miguel, La Pampa (RA)

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Integral

unread,
Oct 7, 2014, 8:06:14 AM10/7/14
to mundovis...@googlegroups.com

Amigo MIGUEL 

Lo que mencionas es muy cierto y por eso a partir de este año decidí utilizar en mi forma de programar los comandos que mencionas como el INSERT, DELETED FROM y el UPDATE y he notado una rapidez en los resultados...

Ahora bien el nuevo proyecto es un pequeño Sistema de un Cliente que tiene poco tiempo en el Mercado y no mueve un gran volumen de información y ademas lo quiere terminado cuanto antes...Si fuera un Cliente mas potencial y con un gran volumen de manejo de información ahí si me vería obligado a migrar a una gestor de Base de Datos Externo y aprenderlo a utilizarlo.

Bueno un poco aclarado el tema les pido me orienten cono manejar el acceso a las tablas en forma compartida y hacerlo mas rápido en la forma de configuración del servidor y las estaciones de trabajo y si aconsejan utilizar el Install Shell...

Lastima que www.portalfox.com  no este activo porque ahí existían si mas no recuerdo diversos artículos...

Espero amigos me orienten en base a sus experiencias con el tema en modo MultiUsuario..

Saludos,

INTEGRAL    

Carlos Miguel FARIAS

unread,
Oct 8, 2014, 7:41:11 AM10/8/14
to mundovisualfoxpro
Si son pocos usuarios (independientemente de la cantidad de datos, no vas a tener muchos problemas con los bloqueos, salvo que todos esos pocos usuarios accedan y modifiquen los mismos registros y con alta concurrencia.

Todas las tablas debes abrirlas en modo compartido (shared). SET EXCLUSIVE OFF, etc.

Si usas INSERT (de SQL) para agregar datos, tienes más del doble de velocidad de agregado que usando la dupla APPEND 
BLANK + REPLACE (esto último debería prohibirse) y la probabilidad de conflicto en la red se reduciría muchisimo.
Recuerda que en VFP 9, puedes con una única sentencia INSERT de SQL, insertar todos los registros de un CURSOR u otro SELECT.

Para los UPDATE y DELETE (ambos de SQL) debes usar siempre la clave primaria en la clausula WHERE
Solo se admite acceder con otras condiciones en casos muy particulares y debidamente testeados, definidos y documentados.

Los select's, para acceder a un registro, utiliza también en el WHERE la clave primaria.

Si debes procesar varios registros para visualizar, cálculos, etc. Crea un cursor con un SELECT y ya en él establece los filtros correspondientes (también en la clausula WHERE) e incluye, aunque no muestres, las respectivas claves primarias de los registros accedidos (de cada una de las tablas involucradas en la consulta).
De esa manera, si desde la grilla o lista el usuario elije algún registro completo de la/s tabla/s, tienes como acceder al registro completo con la clave primaria incluida.
Con los cursores creados en memoria si puedes usar sin problemas las sentencias tradicionales de Fox como SCAN para recorrer.

No tengas miedo en usar SQL para tablas nativas, es más, la conocida técnica rushmore de fox, cuando se acceden más de una tabla, solo es aplicable usando SQL.

Otro ítem interesante a tener en cuenta. Usando SQL, no tienes que preocuparte de abrir o cerrar las tablas (solo la base de datos) y tampoco de activar/desactivar los indices, si los datos los necesitas ordenados, directamente lo indicas la sentencia SELECT con  los que los recuperas.

Es más, ni siquiera debes preocuparte de que indices crear, más allá de los correspondientes a las claves primarias y las foráneas correspondientes.

Como puedes ver, mi propuesta implica menor cantidad de codificación, y codificación más simple, no indicas como, solo lo que quieres hacer.

Debes indicar en el archivo config.fpw que todos los archivos de trabajo son locales (ver ayuda para detalle).

Y si a futuro, necesitas migrar a un SGBD, solo encapsulas los comandos SQL y tienes tu código casi en un 100% migrado.

Luego con más tiempo, si interesa, puedo agregar algunos micro ejemplos de codificación


Saludos: Miguel, La Pampa (RA)

--

Miguel Santander

unread,
Oct 8, 2014, 7:53:47 AM10/8/14
to mundovis...@googlegroups.com

Excelente Carlos, puedo seguir estos consejos útiles yo también y por favor si podes agregar algunos ejemplos de codificación seria lo máximo.

Analyzer

unread,
Oct 14, 2014, 9:54:28 AM10/14/14
to mundovisualfoxpro


Saludos!

--
Reply all
Reply to author
Forward
0 new messages