Uso de Tablas Compartidas y Bloqueo de Registros en FoxPro

Uso de tablas compartidas y bloqueo de registros en FoxPro Asumamos que tienes 2 tablas libres que quieres compartir. Es

Views 30 Downloads 2 File size 28KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Uso de tablas compartidas y bloqueo de registros en FoxPro Asumamos que tienes 2 tablas libres que quieres compartir. Estas tablas se llaman CLIENTES.DBF y PRODUCTOS.DBF Primera forma: Set Exclusive Off Use CLIENTES in 0 Use PRODUCTOS in 0 Explicación: Toda tabla que abras después de haber dado la instrucción "Set Exclusive Off" se abrirá en modo compartido. Si deseas dejar de seguir abriendo tablas en modo compartido, deberás incluir el comando "Set Exclusive On" para que las tablas que abras luego de este comando no sean compartidas sino "exclusivas". Segunda forma: Use CLIENTES in 0 Shared again Use PRODUCTOS in 0 Shared again Explicación: Toda tablas que al abrirla de agregues la palabra "Shared" se abrirá en modo compartido. Si NO DESEAS que la tabla se abra en modo compartido, deberás usar la palabra "Exclusive" en vez de la palabra "Shared". Adicionalmente: Por razones de la "lógica" de tu programa o razones de código de FOX, algunas veces necesitarás "bloquear" una tabla que habías abierto en modo "compartido". "Bloquearla" significa que solo el usuario que la bloqueo podrá escribir en ella, hasta que este mismo usuario la haya desbloqueado. Por ejemplo, si estas modificando el Saldo Pendiente de un cliente, sería sabio "Bloquear la tabla" mientras cambias el saldo para que no pueda entrar un usuario desde otra estación y trastornar tu trabajo. 1

Luego de que hayas hecho tu modificación, NO SE TE DEBE OLVIDAR desbloquear la tabla para que cualquier otro usuario pueda trabajar con ella de la manera que tu lo hiciste. Para bloquear una tabla, debes usar la función FLOCK(tabla). Esta función te devuelve .T. si logró bloquear la tabla y .F. si no lo logró. Puede ser que el usuario "A" no logre bloquear la tabla porque el usuario "B" ya la tenía bloqueada y hay que esperar a que el usuario "B" la "libere". Por ejemplo IF FLOCK("CLIENTES") * Quiere decir que si se pudo bloquear "CLIENTES", entonces pones aquí tu * código que modifica el Saldo del Cliente. ELSE * Quiere decir que no se pudo bloquear "CLIENTES", entonces debes poner un * aviso indicándole al operador que debe esperar unos segundos en lo que alguien * que tiene agarrada la tabla, por fin la libera. Esto debería ir en un LOOP. ENDIF

Para liberar las tablas que están bloqueadas debes utilizar el comando UNLOCK. Finalmente 2 cositas: 1- A veces no es necesario bloquear TODA la tabla, sino solamente un registro de la tabla (o ciertos registros). Para bloquear un registro específico solamente, debes usar la función RLOCK() en lugar de la función FLOCK() 2- Otros comandos relativos al bloqueo y desbloqueo son: SET MULTILOCKS ON/OFF que le avisa a Fox que permita o no permita bloquear a la vez varios registros individuales de una tabla (o las tablas). SET REPROCESS TO "n" que le indica a Fox cuantos segundos debe esperar para reintentar lograr un bloqueo exitoso con FLOCK() o RLOCK(). Si le pones -1, Fox se quedará eternamente intentando bloquear la tabla hasta que lo logre.

2