FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Tdatabase - forma de uso
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Tdatabase - forma de uso
Posted: Mon Nov 04, 2013 01:07 PM
Buen día,

Con la Tdatabase yo venía usando sin problemas (para uso en red local con varias pc's), por ejemplo así:

Code (fw): Select all Collapse
local cAgDire:=cGetNewAlias('Direcc')

if lChDir(cLocalServer)
             use ".\DB\AGDIRE" shared new alias (cAgDire)
             DATABASE oDbf
     endif
 Catch oError
         msginfo(oError:description+renglon+;
                         "No existe la DBF "+cLocalServer+"\DB\AGDIRE" +renglon+;
                         "que se intenta abrir"+renglon+;
                         "No se podrá abrir la Agenda Direcciones"+renglon+;
                         "hasta solucionar el error"+renglon+;
                         "Agenda 668") //
         return nil

 End


A partir de otra consulta, el Sr. Nages me indicó usar así la TDatabase:

Code (fw): Select all Collapse
oDbf  := TDataBase():Open( nil, ".\DB\AGDIRE", "DBFCDX", .t. )


Esto último no me permite abrir los archivos en modo compartido y aunque cambié haciendo así:
Code (fw): Select all Collapse
local cAgDire:=cGetNewAlias('Direcc')
oDbf  := TDataBase():Open( cAgDire, ".\DB\AGDIRE", "DBFCDX", .t. )


Sigue sin poder abrirse las DBF en modo compartido, pareciera que las abre en modo exclusivo.

De esto a mi consulta: ¿Como se abren en modo compartido las DBF's usando Tdatabase?, ¿debo seguir usando mi primer método?

Gracias.

Rolando :-)
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Tdatabase - forma de uso
Posted: Mon Nov 04, 2013 01:31 PM
Code (fw): Select all Collapse
FUNCTION CLIENTES( lAppend, DbClientes, DbCabec, DbPaieMae, DeOndeVem )

    IF DeOndeVem != [DELIVERY] .AND. DeOndeVem != [RESERVAS] .AND. ;
       DeOndeVem != [LOCACAO]

       IF NetUse( "CADETIQ", .T. )

          OrdListAdd( "CADETIQ", "RAZ_MATRIC", "DEST_NOME", "END",             ;
                                 "NOME_ARTIS", "CPF",       "CNPJ",            ;
                                 "TELEFONE" )

          //OrdDescend( ,,.T. ) // - Crescente
          OrdDescend( ,,.F. ) // - Decrescente

          DATABASE DbClientes
          DbClientes:Gotop()
          DbClientes:Load()
          DbClientes:SetBuffer( .T. )

       ELSE

          MsgStop( "Banco de Dados dos CLIENTES Bloqueado", "Cuidado!" )
          RETURN NIL

       ENDIF

    ENDIF

    IF NetUse( "CABCLALF", .T. )   // Exclusive ‚ .F.  Shared ‚ .T.

       DATABASE DbCabec
       DbCabec:Load()
       DbCabec:SetBuffer( .T. )
       DbCabec:GoTop()
       DbSkip(-1)

    ELSE

       MsgStop( "Banco de Dados Bloqueado", "Cuidado!" )

       RETURN NIL

    ENDIF

    IF NetUse( "PAIEMAE", .T. )

       OrdListAdd( "PAIEMAE", "RAZ_MATRIC" )
       OrdDescend( ,,.F. ) // - Decrescente

       DATABASE DbPaieMae // Como Escrevemos em Ingles
       DbPaieMae:Gotop()
       DbPaieMae:Load()
       DbPaieMae:SetBuffer( .T. )    // Assim, .T. a Op‡Æo (Cancelar) Funciona.

    ELSE

       MsgStop( "Banco de Dados dos CLIENTES Bloqueado", "Cuidado!" )
       RETURN NIL

    ENDIF

    DbSelectArea( ( DbClientes:cAlias ) )
    DbClientes:SetOrder( 2 )
    DbGoTop()

RETURN NIL

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

   // Se nÆo podemos abrir, solicita repeti‡Æo
   MsgStop( "IMPOSSIVEL ABRIR BANCO DE DADOS: " + cAlias + CRLF + ;
            OemToAnsi( "BLOQUEADO POR OUTRO USUµRIO." ), ;
            "ERRO FATAL DE REDE! FECHAR BANCO DE DADOS." )

RETURN( .F. )


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Tdatabase - forma de uso
Posted: Tue Nov 05, 2013 06:55 PM
Gracias,

Pero por como venía usando, me conviene seguir así:

Code (fw): Select all Collapse
use ".\DB\AGDIRE" shared new alias (cAgDire)
             DATABASE oDbf


Lo extraño es que esto tendría que ser lo mismo pero no funciona en red local, abre la dbf pero en modo exclusivo

Code (fw): Select all Collapse
oDbf  := TDataBase():Open( nil, ".\DB\AGDIRE", "DBFCDX", .t. )


Rolando :-)
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Tdatabase - forma de uso
Posted: Tue Nov 05, 2013 07:37 PM

Porfa, mira en \samples:

SCHEDULE.PRG
TESTXBR3.PRG

Creo sea la solución.

saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion