Uso exclusivo de tablas

234 views
Skip to first unread message

Idalberto Gonzalez

unread,
Nov 3, 2012, 10:55:37 PM11/3/12
to publice...@googlegroups.com
Hola
 
Aunque uso en mis declaraciones iniciales el comando "Set exclusive off", en ocasiones a los ususarios le sale un mensaje de error diciendo "El archivo está siendo utilizado por otro usuario". Alguien podría hacerme el favor de decirme a que se debe esto?. Gracias.
 
Saludos,
Idalberto González P.
 

Miguel

unread,
Nov 4, 2012, 6:21:38 AM11/4/12
to publice...@googlegroups.com
Hola,
 
Yo creo que es un tema de bloqueos, mirate SET REPROCESS. ¿Dice "archivo" o "registro"?.
Saludos,
Miguel

Luis Maria Guayan

unread,
Nov 4, 2012, 9:44:00 AM11/4/12
to publice...@googlegroups.com
SET EXCLUSIVE (como muchos otros comandos SETs) tienen alcance solo en la sesión de datos actual.

Si utilizas formularios con sesiones de datos privadas o cambias la sesión de datos, debes establecer nuevamente el SET EXCLUSIVE


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

--
 
 
 

HernanCano

unread,
Nov 4, 2012, 10:36:03 PM11/4/12
to publice...@googlegroups.com
Idalberto:

Cuando usas "SET EXCLUSIVE OFF", le indicas a Fox/VFP que los archivos de datos (los .DBF) los quieres abrir "de modo no exclusivo" --que es lo mismo que decir "de modo compartido"-- cuando usas algo como "USE ARCHIVO"; es decir que si usas "USE ARCHIVO EXCLUSIVE" o "USE ARCHIVO SHARED" el "SET EXCLUSIVE" puede ser indistintamente ON u OFF. ¿Cierto?

Ahora: cuando dos usuarios (en la misma app, o en diferente app pero con permisividad de acceso compartido) intentan acceder al mismno archivo DBF (según el mensaje que expresas)  y AMBOS DESEAN GRABAR DATOS AL MISMO TIEMPO, o mejor casi al mismo tiempo, entonces el primero que acceda al archivo y LO BLOQUEE para grabar los datos, obtiene "acceso EXCLUSIVO MOMENTANEAMENTE" por unos segundos (lo que el programador determine) cuando uno desea hacer operaciones de grabado de datos.

Si el mensaje dice "Archivo en uso por otro usuario", es porque lo que se bloqueó fue el archivo.
Si el mensaje dice "Registro en uso por otro usuario", es porque lo que se bloqueó fue un registro --o varios--.

Si el programador desea bloquear un archivo, usa FLOCK().
Si el programador desea bloquear un registro, usa LOCK() o RLOCK().
Hay otros métodos automáticos de bloqueo que no expondré, pero que quizá tú conozcas, o al menos hayas estado utilizando y que muy probablemente reconozcas --aunque yo no los exponga aquí--.

Cuando terminas de hacer la operación, se desbloquea el registro o el archivo con UNLOCK.

También existe el buffering y las transacciones.

Los métodos de bloqueo se usan justo antes de hacer una operación de grabado de datos, como INSERT, UPDATE, APPEND; con el DELETE --teóricamente-- no se requiere, pero yo lo uso y lo recomiendo.

Si dos usuarios accesan --entiéndase que es la app-- simultáneamente un registro, sólo uno gana: bloquea el registro antes que el otro.
Justo aquí es que, al segundo usuario, el motor de Fox/VFP le dice que el registro o archivo está en uso por otro usuario.
Este mensaje ---mientras la app esté bien implementada-- debe aparecer máximo por pocos segundos --mientras la app graba y vuelve a liberar el registro o archivo.

El programador utiliza SET REPROCESS para indicar después de cuántos segundos puede aparecer el mensaje (es decir que el motor Fox/VFP reintenta la operación sin dar ese mensaje).

((( si continúas con dudas, sigue preguntando en este mismo hilo )))

Chao.

Idalberto Gonzalez

unread,
Nov 5, 2012, 4:09:28 PM11/5/12
to publice...@googlegroups.com
Hola
 
Gracias Hernan por tu valiosa explicación. Voy a revisar a ver donde puedo mejorar el acceso simutaneo de usuarios.
 
Saludos,
Idalberto González.

Idalberto Gonzalez

unread,
Nov 5, 2012, 4:10:27 PM11/5/12
to publice...@googlegroups.com
Miguel, el mensaje de error dice archivo.

 

Idalberto Gonzalez

unread,
Nov 5, 2012, 4:12:31 PM11/5/12
to publice...@googlegroups.com
Hola
 
Gracias Luis Maria por la observación.
 
Saludos,
Idalberto González.
 
 

Alberto Garcia Cano

unread,
Dec 23, 2013, 8:35:52 AM12/23/13
to publice...@googlegroups.com
Estimados, les paso un escenario que, segun he visto en las respuestas publicadas, no está presente. Yo particularmente me he encontrado con ese mensaje en situaciones en las que UNA ESTACIÓN de la red efectúa una consulta mediante lenguaje SQL (notese que dije CONSULTA, vale decir que no intentó realizar UPDATE ni DELETE).

El escenario descripto me ha OBLIGADO entonces a DESCARTAR las consultas con SQL y regresar al recorrido de tablas con DO WHILE o SCAN porque cualquier bloqueo me impide consultar correctamente.

Luis Maria Guayan

unread,
Dec 23, 2013, 12:09:34 PM12/23/13
to publice...@googlegroups.com
Si la tabla o tablas que incluyes en la consulta no están abiertas anteriormente, el comando SELECT las abre automáticamente. Si como configuración de VFP no especificas SET EXCLUSIVE OFF, estas tablas que se abren automáticamente se abreen o intentan abrirse en modo esclusivo.

Siempre configura al inicio de tu aplicación SET EXCLUSIVE OFF y siempre asegurate de abrir tus tablas en modo compartido con la cláusula SHARED




Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Jairo Miranda

unread,
Dec 24, 2013, 5:14:03 PM12/24/13
to publice...@googlegroups.com

La verdad es que ese mensaje sale cuando se quiere tener acceso exclusivo sobre un registro , tabla en particular, es decir al hacer un insert, delete, o update.

Al usar el Do while .  siempre se empeiza con un select tabla , go top , se mueven los campos a variables y se muestran en el recorrido que se desea hacer. Si usas tablas libres lo mejor es usar el Rlock() o el NUmlock() , que verifica el estado del registro.

 

IF .NOT. RLOCK()

   @ 23,22 SAY "** EL REGISTRO NO ESTA DISPONIBLE ::::"

   TIME=0

   DO WHIL TIME < 1000

      TIME=TIME+1

   ENDDO

   @ 23,22 SAY "                                    "

   RETRY

ENDIF

 

JM

Jairo Miranda

unread,
Jan 8, 2014, 2:04:36 PM1/8/14
to publice...@googlegroups.com

Llámame voy a grabar para hacer una prueba

JM

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Alberto Garcia Cano
Enviado el: lunes, 23 de diciembre de 2013 8:36
Para: publice...@googlegroups.com
Asunto: [vfp] Re: Uso exclusivo de tablas

 

Estimados, les paso un escenario que, segun he visto en las respuestas publicadas, no está presente. Yo particularmente me he encontrado con ese mensaje en situaciones en las que UNA ESTACIÓN de la red efectúa una consulta mediante lenguaje SQL (notese que dije CONSULTA, vale decir que no intentó realizar UPDATE ni DELETE).

Reply all
Reply to author
Forward
0 new messages