Olá Glauco!
junto com os discos originais do Clipper 5, vieram vários exemplos de rotinas, incluindo uma para abertura de arquivos em rede, chamada NetUse(). Veja abaixo a versão que modifiquei para meu uso:
//------------------------------------------------------------------------------
* NetUse( <arquivo>, [modo abertura], [tempo segundos], [Alias] ) --> lSuccess
#define DB_SHARED .F.
#define DB_EXLUSIVE .T.
FUNCTION NetUse( cDatabase, lOpenMode, nSeconds, cAlias )
LOCAL lForever , nPos
// verifica parametros
If Empty( cDatabase )
Return .F.
Endif
lOpenMode := If( Empty( lOpenMode ), DB_SHARED, lOpenMode )
nSeconds := If( nSeconds == Nil, 0, nSeconds )
cAlias := If( Empty( cAlias ), FileBase( cDataBase ), cAlias )
//---
lForever = (nSeconds = 0)
DO WHILE .T.
IF lOpenMode
USE (cDatabase) EXCLUSIVE NEW Alias (cAlias)
ELSE
USE (cDatabase) SHARED NEW Alias (cAlias)
ENDIF
IF .NOT. NETERR() // USE succeeds
RETURN (.T.)
ENDIF
INKEY(1) // Wait 1 second
nSeconds = nSeconds - 1
if nSeconds < 0
If Alert( "NÆo foi poss¡vel abrir o arquivo " + cDataBase + ".DBF.;" + ;
" (Arquivo em manuten?Æo por outro usu rio).;; " + ;
"Deseja tentar novamente?", {" Sim "," NÆo " } ) == 2
Exit
Endif
nSeconds := 5
Endif
ENDDO
RETURN (.F.) // USE fails
//------------------------------------------------------------------------------
*
* FileBase( <cFile> ) --> cFileBase
*
* Extract the eight letter base name from a filename
*
*
FUNCTION FileBase( cFile )
LOCAL nPos // Marks the position of the last "\", if any
LOCAL cFileBase // Return value containing the filename
DO CASE
CASE ( nPos := RAT( "\", cFile )) != 0
// Strip out full path name leaving only the filename (with
// extension)
cFileBase := SUBSTR( cFile, nPos + 1 )
CASE ( nPos := AT( ":", cFile )) != 0
// Strip drive letter if cFile contains only drive letter
// no subdirectories
cFileBase := SUBSTR( cFile, nPos + 1 )
OTHERWISE
// Assume it's already taken care of
cFileBase := cFile
ENDCASE
// Strip out the file extension, if any
IF ( nPos := AT( ".", cFileBase )) != 0
cFileBase := SUBSTR( cFileBase, 1, nPos - 1 )
ENDIF
RETURN ( cFileBase )
//------------------------------------------------------------------------------
* NetUse( <arquivo>, [modo abertura], [tempo segundos], [Alias] ) --> lSuccess
Exemplo de uso:
Suponha que voce queira abrir um arquivo chamado Tabela, em modo compartilhado, tentando por 5 segundos e com o alias Cliente:
IF ! NetUse( "Tabela", .F., 5, "Cliente" )
RETURN
ENDIF
Qualquer dúvida é só postar.
[]´s
AlxSts