FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posts: 139
Joined: Sun Apr 23, 2006 09:00 AM
Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posted: Sat Sep 03, 2011 07:46 AM

Hola a todos/as.

Quisiera saber si es posible cambiar (en tiempo de ejecuci贸n) a modo exclusivo un archivo que ha sido abierto en modo compartido. Es para hacer un pack de registros borrados durante la ejecuci贸n del programa.

Gracias por adelantado y un saludo,
Fernando Morales
Las Palmas de Gran Canaria

Un saludo,

Fernando

Las Palmas de Gran Canaria
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posted: Sat Sep 03, 2011 02:48 PM

Para compactar un fichero, por ejemplo .DBF, que es usado en modo compartido, tienes que cerrarlo y reabrirlo en modo exclusivo. Haces la compactacion, lo cierras y reabres de nuevo en modo compartido con todos sus indices.

Puedes probar con lo siguiente:
1- Lo cierras.
2- Trata de abrirlo en exclusivo, comprobando si otro usuario lo tiene abierto con NetErr(). Por supuesto, si algun otro usuario lo tiene abierto, te devolver谩 .t., por lo que debes devolverlo a su estado anterior (compartido) + sus indices.
3- Si NetErr() devuelve .f., el fichero se abre en modo exclusivo.
4- Usa tu funcion de compactacion. (dbPack()) o PACK
5- Lo cierras y reabres en modo compartido nuevamente.

Recuerda que el uso de Pack es muy peligroso, por lo que tienes que asegurarte una copia de respaldo, antes.

Saludos.

Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Re: Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posted: Sun Sep 04, 2011 04:41 AM

Hola fernando:

Porque no lo abres en modo compartido y usan la clausula FOR ! deleted() en los indices, de este modo los ficheros borrados se marcan como borrados y no aparecen en el indice, pero ademas tienes la ventaja, que si luego quieres recuperarlos, los tienes.

un saludo
JLL

Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Posts: 139
Joined: Sun Apr 23, 2006 09:00 AM
Re: Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posted: Sun Sep 04, 2011 08:56 AM

Gracias Francisco y jll-fwh por las respuestas.
Los m茅todos que ambos me han dado los utilizo ya, simplemente era por saber si se podia realizar del modo que yo preguntaba. Despu茅s de analizar un poco el uso que le van a dar los usuarios a los archivos he comprobado que el borrado se va a producir en pocas ocasiones con lo que se puede evitar el uso de PACK o preparar un m贸dulo concreto que realice esa funci贸n sobre todos los archivos y se ejecuta cuando el usuario lo considera conveniente.

Un saludo,

Fernando

Las Palmas de Gran Canaria
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Cambiar a modo exclusivo en tiempo de ejecuci贸n.
Posted: Mon Sep 05, 2011 01:09 PM

Eso no se puede hacer. Cuando se abre una DBF simpre termina en la funci贸n de bajo nivel en C para abrir un archivo y desgraciadamente el atributo de apertura no se puede cambiar.

Lo que tendr铆as que hacer es una funci贸n que:

1) Si quieres mantener el mismo 谩rea de trabajo lo guarde en una variable
2) Cerrar
3) Abrir en modo exclusivo
4) si hay errores es que alguien lo tiene en uso - ir al punto 7
5) Hacer lo que desees en modo exclusivo
6) Cerrar
7) Abrir en el mismo 谩rea de trabajo

Saludos

______________________________________________________________________________

Sevilla - Andaluc铆a

Continue the discussion