01 Abr 2018 19:03
02 Abr 2018 01:50
Local x, cArquivo, cAlias, aIndices
cArquivo := "NomeArq.Dbf" // nome do .DBF
aIndices := { "Indice1", "Indice2", etc... } // nomes dos indices
cAlias := Left( cArquivo, 1, At( ".", cArquivo ) - 1 )
If File( cArquivo ) // verifica se arquivo existe
If Select( cAlias ) = 0 // verifica se não está aberto
USE ( cArquivo ) SHARED NEW // abre o arquivo
If Used() // verifica se deu tudo certo
For x = 1 To Len( aIndices )
SET INDEX TO ( aIndices[x] ) ADDITIVE // abre os indices
Next
DbSetOrder( nOrdem )
EndIf
Else
DbSelect( cAlias )
DbSetOrder( nOrdem )
EndIf
EndIf
02 Abr 2018 12:17
IF .NOT. File( "arquivo.dbf" )
? "Arquivo não existe"
// e o que fazer se não existir
ENDIF
02 Abr 2018 18:51
USE TEMPFILE SHARED NEW // Se TEMPFILE não existir, exibirá a mensagem de erro.
02 Abr 2018 20:01
02 Abr 2018 23:32
E sim, acusa. Porém, no comando USE você não pode usar o parâmetro SHARED. Se você usar SHARED o arquivo não é travado. Se usar apenas o comando USE sem SHARED, o arquivo será aberto em modo exclusivo, e NETERR() será .T. Se não for possível abrir o arquivo em modo exclusivo, NETERR() então será .F.Ingrid Farabulini escreveu:Havia lido em um livro que se houvesse algum erro com os comandos USE e APPEND BLANK, essa função também acusaria.
Caramba, qual exatamente seria essa situação que nesses milésimos de segundo o arquivo poderia ser deletado?Ingrid Farabulini escreveu:o que preciso é criar o arquivo caso ocorra a exclusão desse arquivo mesmo depois de testado a existência do mesmo com a função FILE(), ou seja, nesse intervalo mínimo de segundos entre a função FILE() e o comando USE.
Mesmo com BEGIN/BREAK não seria possível sem alterar o arquivo ERRORSYS. O problema é o que fazer a partir dai. Tem como você postar um exemplo da situação que você precisa tratar?Ingrid Farabulini escreveu:Acredito que somente com um controle de erro BEGIN/BRAKE vou conseguir corrigir
18 Abr 2018 18:50
16 Mai 2018 15:17
16 Mai 2018 17:17
#define true .T.
#define false .F.
#define FALSO .F.
#define OK .T.
#define ESC 27
#define P_DEF(Par, Def) Par := if( Par = Nil, Def, Par )
*-----------------------------------------------*
function NetUse( cBcoDados, lModo, nSegundos, cAlias )
*-----------------------------------------------*
LOCAL cScreen := SaveScreen()
LOCAL nArea := 0
LOCAL Restart := OK
LOCAL cStr1
LOCAL cStr2
LOCAL cStr3
LOCAL cStr4
LOCAL cStr5
LOCAL cStr6
LOCAL lForever
LOCAL cTela
LOCAL lAberto := FALSO
P_DEF( lModo, OK )
P_DEF( nSegundos, 2 )
cBcoDados := StrTran( cBcoDados, '.DBF')
cAlias := Iif( cAlias = NIL, cBcoDados, cAlias )
lForever := ( nSegundos = 0 )
lAberto := (cBcoDados)->(Used())
if lAberto // 14:03 25/04/2018
(cBcoDados)->(DbCloseArea())
lAberto := false
endif
while Restart
while (lForever .OR. nSegundos > 0)
if lModo
Use (cBcoDados) SHARED NEW Alias ( cAlias )
else
Use (cBcoDados) EXCLUSIVE NEW Alias ( cAlias )
endif
if !NetErr()
ResTela( cScreen )
return( OK )
endif
cTela := Mensagem("Tentando acesso a " + Upper(AllTrim(cBcoDados)) + ".DBF...")
Inkey(.5)
nSegundos -= .5
ResTela( cTela )
EndDo
nOpcao := Conf("Acesso Negado a " + Upper(AllTrim( cBcoDados )) + " Novamente ? ")
if nOpcao = OK
ResTart := OK
else
ResTart := FALSO
DbCloseAll()
FChDir( oAmbiente:xBase )
SetColor("")
Cls
cStr1 := "#1 Se outra estação estiver usando o sistema, finalize-a. ;;"
cStr2 := "#2 Se outra estação estiver indexando, aguarde o término. ;;"
cStr3 := "#3 Se SHARE estiver instalado, aumente os parãmetros de ;"
cStr4 := " travamento de arquivos. Ex.: SHARE /F:18810 /L:510. ;;"
cStr5 := "#4 Em ambiente de rede NOVELL, verifique o arquivo NET.CFG;"
cStr6 := " e se necessário, acrescente a linha FILE HANDLES=127. ;"
Alert( cStr1 + cStr2 + cStr3 + cStr4 + cStr5 + cStr6, "W+/B")
Break
//Quit
endif
EndDo
return( FALSO )
function TravaReg( nTentativa, aRegistros )
*+-----------------------------------+*
LOCAL cScreen := SaveScreen()
LOCAL Restart := OK
LOCAL lContinua
hb_default(@nTentativa, 2)
lContinua := ( nTentativa == 0 )
while Restart
while (!RLock() .AND. ( nTentativa > 0 .OR. lContinua ))
Mensagem(" Travando Registro " + AllTrim(Str( Recno())) + " no Arquivo " + Alias(), CorBox())
if inKey(1) = K_ESC
exit
endif
nTentativa--
enddo
if !RLock()
if !Conf("Registro em uso. Tentar Novamente ?" )
ResTela( cScreen )
return( false )
endif
ResTart := OK
nTentativa := 2
else
ResTela( cScreen )
return( true )
endif
EndDo
function TravaArq()
*+-----------------------------------+*
if Flock()
return( true )
endif
while !FLock()
ErrorBeep()
if !Conf("Arquivo em uso em outra Estaçao. Tentar Novamente ?" )
return( false )
endif
if FLock()
return( true )
endif
enddo
return( true )
function Incluiu()
*+-----------------------------------+*
DbAppend()
if !NetErr()
return( true )
endif
while NetErr()
ErrorBeep()
if !Conf("Registro em uso em outra Estaçao. Tentar Novamente ?")
return( false )
endif
DbAppend()
if !NetErr()
return( true )
endif
EndDo
return( true )
function Libera()
*+-----------------------------------+*
//DbCommit() // Atualiza Buffers
DbSkip(0) // Refresh
DbGoto( Recno()) // Refresh
DbUnLock() // Libera Registros / Arquivos
return Nil
16 Mai 2018 17:32
if Printer->(TravaArq())
for nX := 1 To nTam
Printer->(DbAppend())
for nField := 1 To Printer->(FCount())
Printer->(FieldPut( nField, aPrinter[nX,nField]))
next
next
Printer->(Libera())
endif
if Conf( "Pergunta: Confirma Registro da Senha ?")
if Vendedor->(TravaReg())
Vendedor->Senha := MsEncrypt(Upper(cPasse))
Vendedor->(Libera())
endif
endif
if Conf("Pergunta: Confirma Inclusao do Grupo ?")
if Grupo( cCodigo )
if Grupo->(Incluiu())
Grupo->Codgrupo := cCodigo
Grupo->Desgrupo := cDescricao
Grupo->Atualizado := Date()
Grupo->Servico := IF( cServico = "S", OK, FALSO )
Grupo->(Libera())
endif
endif
endif
16 Abr 2020 17:00