FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Comprobar DBF abierta
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Comprobar DBF abierta
Posted: Thu Aug 19, 2021 02:02 AM

Estoy tratando de comprobar si una base de datos esta abierta desde otro programa, uso:

Select 1
Use C:\Datos\Mesa_1 ALIAS aMesa_1 Exclusive
if !NetErr() ////compruebo si puedo abrirla o no
Select 2 ///uso otra base datos para poner el resultado
Go Registro
if Rlock() ///NUNCA LO BLOQUEA CUANDO LA BASE DE DATOS PRIMERA ESTA OCUPADA
aDatos->Enuso:=.T.
Endif
Else
? "no hago nada"
Endif

¿ Porque después de que Neterr() da .T. ya no se puedo bloquear un registro de otra base de datos ?

¿ Que estoy haciendo mal ?

Gracias. Saludos

Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Comprobar DBF abierta
Posted: Thu Aug 19, 2021 03:34 AM
Prueba asi:
Code (fw): Select all Collapse
Select 1
Use C:\Datos\Mesa_1 ALIAS aMesa_1 Exclusive
lerror:=NetErr()


Select 2 ///uso otra base datos para poner el resultado
Go Registro
if Rlock() 
    aDatos->Enuso:=iif(lerror,.T.,.F.)
Else
    ?'no se pudo bloquear 2da BD'
Endif
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 607
Joined: Mon Mar 04, 2013 04:32 PM
Re: Comprobar DBF abierta
Posted: Thu Aug 19, 2021 08:42 AM
Hola Servicomver:

Yo utilizo la funcion Used()

Code (fw): Select all Collapse
IF(aMesa_1->(Used() ), Select("aMesa_1"),dbUseArea( .T., , "Mesa_1", "aMesa_1", .T. )    )


Saludos.

Jose
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Comprobar DBF abierta
Posted: Thu Aug 19, 2021 08:49 AM
En entorno compartido se utiliza la funcion de apertura Net_Use() o similar que permite una manera suave de comprobacion y apertura
Se usa algo asi como:

Code (fw): Select all Collapse
IF !Net_Use(cFileDbf, .f., 5)
   MsgInfo("Nos se pudo abrir !", cFileDbf)
ENDIF
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Comprobar DBF abierta
Posted: Thu Aug 19, 2021 01:14 PM
hmpaquito wrote:En entorno compartido se utiliza la funcion de apertura Net_Use() o similar que permite una manera suave de comprobacion y apertura
Se usa algo asi como:

Code (fw): Select all Collapse
IF !Net_Use(cFileDbf, .f., 5)
   MsgInfo("Nos se pudo abrir !", cFileDbf)
ENDIF


Code (fw): Select all Collapse
// ------------------------------------------------------------------------
// Fun‡Æo.....: NetUse
// Descri‡Æo..: Abre um Arquivo DBF, em modo EXCLUSIVE (.F.), ou SHARED (.T.)
// Par metros : cDbf      -> Nome da Base de Dados
//              lShared   -> SHARED (.T.), EXCLUSIVE (.F.)
// Devolve ..: .T.       -> Si se ha podido abrir.
//             .F.       -> Si no se ha podido abrir.
// ------------------------------------------------------------------------
FUNCTION NetUse( cDbf, lShared )

   LOCAL cAlias := cFileName( cDbf )
   LOCAL bAlias := cFileName( cDbf )

   // CONTROLE DE PARAMETROS DE ENTRADA =====================
   If cDbf = NIL .OR. !File( cDbf + ".DBF" )
      MsgStop( "NOME DO ARQUIVO INCORRETO" + CRLF + CRLF + ;
               "NÃO ACHEI BANCO DE DADOS." + CRLF + CRLF + ;
               cDbf + ".DBF", "ERRO FATAL!!" )
      RETURN( .F. )
   ENDIF

   IIf( lShared = NIL, lShared := .F., lShared )
   // ======================================================

   IF lShared = .T.

      USE ( cDbf ) ALIAS ( cAlias := GetNewAlias( cAlias ) ) ;
         VIA "DBFCDX" SHARED NEW

   ELSE
      USE ( cDbf ) ALIAS ( cAlias ) VIA "DBFCDX" EXCLUSIVE NEW
   ENDIF

   IF !NetErr()
      RETURN( .T. )
   ENDIF

   MsgStop( "IMPOSSIVEL ABRIR BANCO DE DADOS: " + cAlias + CRLF + ;
            OemToAnsi( "BLOQUEADO POR OUTRO USUµRIO." ), ;
            "ERRO FATAL DE REDE! FECHAR BANCO DE DADOS." )

RETURN( .F. )


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 198
Joined: Fri Nov 18, 2005 07:34 PM
Re: Comprobar DBF abierta
Posted: Thu Aug 19, 2021 06:21 PM

Muchisimas gracias, Problema resuelto

Continue the discussion