La Web del Programador: Comunidad de Programadores
 
    Pregunta:  516 - VISUAL FOXPRO PROGRAMACION EN REDES
Autor:  Peruvianstocks
Para desarrollar unaa aplicacion en redes de VFox:
1)Como se realiza el acceso simultaneo a una base de datos en el servidor? He leido que deben darse atributos de bloqueo de tablas optimista, pesimista,etc.
2)Se debe previamente establecer una conexion odbc en cada maquina cliente respecto al servidor vfox o la conexion se hace en el programa?
3)De ser posible podrian enviarme una pequeña aplicacion de ejemplo de acceso simultaneo a una base de datos (obviamente a sus tablas) con ingreso y actualizacion de datos que eviten conflictos?
Muchas gracias

  Respuesta:  Victor manuel suarez
bueno no creo que se deba usar buffers para cada form yo uso solo para abrir las tablas en cada form el entorno de datos y porngo las tablas que uso para el form.

luego en cada transacion que hago en mi aplicacion hago bloqueo del registro que voy a utilizar y protejo mi transacion con rollback()
y luego lo cierro la trancacion con end transaction

eso es lo mas seguro que utilizo en mis aplicaciones

si deseas mas informacion escribeme

programador sistemas
colombia

  Respuesta:  Santiago Starita
Que tal amigo.Bueno trabajar en red con Visual Foxpro es bastante menos complicado de lo que parece, solo tienes que tomar algunas precauciones.
Para empezar te cuento que no tendras que escribir mas de 5 o 6 lineas de codigo Vfp hace practicamente todo por vos.
1.-Una vez creada la base e incluida en el proyecto se creara el cursor1 dentro de las propiedades de este existe la propiedad buffermodeoverrrite, que creo tiene 6 opciones, 0 ninguno,1 usar conf. actual,2 pesimista de filas, 3 optimista de filas, 4 pes. de tablas, 5 op. de tablas.Bueno aqui tenes que decidir que tipo de bloqueo quieres para tu tabla(o bien a nivel registro pesimista(2) que bloquea solo el registro en curso apenas editas o bien a nivel optimista(3) que lo hace en el instante que grabas, lo mismo ocurre a nivel tabla con la diferencia que bloquea toda la tabla), lo aconsejable es hacerlo a nivel registro, yo personalmente lo hago a nivel registro optimista(3).-
2.-Bien ahora si has elegido una opcion entre 2 y 5 para el buffermodeoverride vfp ya sabe que quieres trabajar en red, solo faltan un par de detalles.
3.-Ahora tienes que crear en tu formulario tres metodos nuevos, que se pueden llamar:
(1)Estado
(2)Grabar
(3)Deshacer
cada uno con el siguiente codigo:
(1)if "2" $getfldstate(-1) or "3"$getfldstate(-1) or "4" $getfldstate(-1)
wait window "Hubo modificaciones"
codigo
else
wait window "No hubo modificaciones"
endif
Esto lo que hace es comparar el cursor con la tabla y establecer si hubo algun cambio si lo hubo devolvera true y podras introducir tu codigo sino devolvera false y podras cambiar de registro.
(2)tableupdate(.t.)
con esta sentencia se haran los cambios en la tabla.
(3) tablerevert(.t.)
con esto y un refresh luego se desharan los cambios que haya habido en el cursor con respecto a la tabla.
4.- Ahora lo unico que tienes que hacer es crear una barra de herramientas o botones de comando que llamen a estos metodos y listo.
5.- Analiza en la ayuda las variantes de tableupdate y tablerevert para ver cual se acomoda a tus necesidades.-
Un saludo desde Bariloche(Argentina).-

  Respuesta:  Gustavo Flórez Madrid
Los bloqueos a las base de datos de un servidor lo realiza la propia base de datos (Oracle, Sql Server, Sysbase, etc) usted no se preocupe de como se debe controlar los bloqueos, simplemente realice una buena conexión con ODBC, le recomiento INTERSOLFV como ODBC, si la base de datos es Oracle necesitas adicionmalmente instalar SQL Client de Oracle 7.3

  Respuesta:  Ricardo Salazar
He leido la recomendacion que hacen mis colegas al respecto de la programación en redes, te recomiendo tambien que en el formulario establezcas la propiedad buffermode a 2(optimista), y que trabajes con sesión privada de datos datasession=2(Sesion privada), esto hace posible cargar la misma tabla en diferentes areas de la memoria
Prueba esto y suerte