Open exclusive em DBF
Moderador: Moderadores
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Open exclusive em DBF
Pessoal, bom dia!
Tenho o comando USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
Queria saber se tem como eu verificar, antes de dar este comando, se há alguém usando este arquivo de forma exclusiva,
para evitar queda do programa, alertando o usuário para que aguarde.
Abraços.
Laudelino
Tenho o comando USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
Queria saber se tem como eu verificar, antes de dar este comando, se há alguém usando este arquivo de forma exclusiva,
para evitar queda do programa, alertando o usuário para que aguarde.
Abraços.
Laudelino
Re: Open exclusive em DBF
Ola amigo, tente assim:
OBSERVACAO: Eu nao costumo abrir os INDICES junto com os DBFS, a nao ser que verifique antes a existencia do arquivo, caso contrario ocorrerar erro de arquivo inexistente.
Abraços.
Código: Selecionar todos
USE CRACE EXCLUSIVE
if neterr()
wait"Arquivo em uso no momento, tente mais tarde"
return
endif
*--aqui segue o seu fluxo normalmente.
SET INDEX TO CRACEAbraços.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Open exclusive em DBF
Andril, obrigado pela ajuda, mas não sei como dar o comando corretamente. Continua o problema. Incluí desta forma:
SELECT 8
USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
if neterr()
wait"Arquivo em uso no momento, tente mais tarde"
return
endif
ZAP
Laudelino
SELECT 8
USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
if neterr()
wait"Arquivo em uso no momento, tente mais tarde"
return
endif
ZAP
Laudelino
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Open exclusive em DBF
Ola!
Usando o Harbour.
Saudações,
Itamar M. Lins Jr.
Usando o Harbour.
Código: Selecionar todos
if select(apel) > 0
FechaDb(apel)
endif
BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
DbUseArea(.t.,'DBFCDX',dDados+db,apel,.T.,.F.,'PTISO')
Recover
msginfo('Erro, abrindo Arquivo: '+dDados+Db+' Compartilhado')
End Sequence
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Re: Open exclusive em DBF
Laudelino, em suma, o que voce fez deveria ter funcionado, visto que esta pedindo abertura exclusiva de arquivo, se alguem em tiver utilizando, NETERR() passa a ser .T., nesse caso, indicando para o usuário tentar mais tarde.
Veja que coloquei um return para sair e não executar o restante do codigo, agora voce precisa ver se no seu codigo cabe esse return ou um outro que direcione o fluxo corretamente, por exemplo return 1 ou return "FALHOU".
Se não conseguir da forma que o nosso colega Itamar informou, poste o trecho onde esta tendo o problema.
Abraços!
Veja que coloquei um return para sair e não executar o restante do codigo, agora voce precisa ver se no seu codigo cabe esse return ou um outro que direcione o fluxo corretamente, por exemplo return 1 ou return "FALHOU".
Se não conseguir da forma que o nosso colega Itamar informou, poste o trecho onde esta tendo o problema.
Abraços!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
Laudelino Scarmagnani
- Usuário Nível 3

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Re: Open exclusive em DBF
Mudei para
//USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
USE CRACE EXCLUSIVE
if neterr()
wait"Arquivo em uso no momento, tente mais tarde"
return
endif
close
USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
ZAP
Desta forma, funcionou. Não sei se é a melhor forma.
Laudelino
//USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
USE CRACE EXCLUSIVE
if neterr()
wait"Arquivo em uso no momento, tente mais tarde"
return
endif
close
USE CRACE INDEX CRACE ALIAS CRACE EXCLUSIVE
ZAP
Desta forma, funcionou. Não sei se é a melhor forma.
Laudelino
Re: Open exclusive em DBF
Amigo, funcionou, mais não é a forma correta. Veja que voce testou se o arquivo poderia ser aberto, e pôde (foi aberto), logo em seguida fechou com CLOSE. Se outro usuario executar o mesmo codigo em outra maquina nesse pequeno instante do CLOSE ao USE ocasionara erro.
Tente nao abrir o INDICE junto com o DBF, pode ser por isso que esteja falhando o seu NETERR(), me parece que este so testa a abertura do dbf.
Tenta ai, blz.
Tente nao abrir o INDICE junto com o DBF, pode ser por isso que esteja falhando o seu NETERR(), me parece que este so testa a abertura do dbf.
Código: Selecionar todos
USE CRACE EXCLUSIVE
if !neterr()
*--aqui dentro dessa estrutura se algum outro usuario tentar acessar esta
*--mesma tarefa simultaneamente, nao conseguira.
IF file("CRACE.IDX") //aqui conforme seu INDICE
SET INDEX TO CRACE
ENDIF
ZAP
*--fecha a area aberta e seus indices
close
else
wait"Falha ao tentar abrir o arquivo solicitado. Esta em uso. Tente depois."
endif
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Open exclusive em DBF
Olá!
Não precisa abrir o arquivo duas vezes. Veja se o código abaixo funciona para você:
Não precisa abrir o arquivo duas vezes. Veja se o código abaixo funciona para você:
Código: Selecionar todos
Procedure Main
Local nOpt := 1
WHILE nOpt == 1
Try
USE CRACE EXCLUSIVE NEW
// Abriu EXCLUSIVE, segue processamento
CRACE->( DbSetIndex( "CRACE" ) )
Zap
// outras instruções
CRACE->( DbCloseArea() )
Catch
// Falha na abertura... try again?
If ( nOpt := Alert( "Arquivo em uso no momento.;Deseja tentar novamente?", { " Sim ", " Não " } ) ) != 1
EXIT
Endif
End Try
Enddo
RETURN[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
Open exclusive em DBF
Olá, estou programando em harbour usando dbf, e logo de abrir uma dbf exclusive, se eu quiser abrir a mesma em uma segunda aplicação, aparece a mensagem Acesso arquivo denegado e nao me deixa abrí-la, isso tem que ser assim, mas quando saio da primeira aplicação e fecha o dbf, com close fornecedores por exemplo, e volto a abrí-la desde a aplicação 2, na parte do grid aparece uma tela preta, mas aparecem os dados do lado da edição. Porque será que não carrega de novo a dbf para o grid, logo que foi aberto desde a outra aplicação?
Ao inicio da função esta definido o set exclusive off
e logo no programa abro a dbf:
e a função que uso para bloquear a dbf é:
Muito obrigada pela dedicação de vocês, aprendo bastante com o forum.
Bettu
Ao inicio da função esta definido o set exclusive off
e logo no programa abro a dbf:
Código: Selecionar todos
PROCEDURE AbrirTabfor
SELECT 1
arq_for=p_pastrab+'fornec'
arq_in1 := p_pastrab+"fornecnpj.ntx"
arq_in2 := p_pastrab+"fornec.ntx"
arq_in3 := p_pastrab+"forneccn.ntx"
if !NET_USE("&arq_for",.t.,3,"&arq_in2","&arq_in1","&arq_in3")
retu .f.
endif
gO TOP
RETURNCódigo: Selecionar todos
func net_use
para file,ex_use,esp,idx1,idx2,idx3,idx4,idx5,idx6
priv etern
etern=(esp=0)
file=file+".dbf"
if !file(file)
MsgInfo ('Arquivo '+FILE+' Inexistente')
retu .f.
endi
do whil (etern .OR. esp > 0)
if ex_use
use &file excl
else
use &file shar
endi
if !neterr()
do case
case pcount()=4
set inde to &idx1
case pcount()=5
set inde to &idx1,&idx2
case pcount()=6
set inde to &idx1,&idx2,&idx3
case pcount()=7
set inde to &idx1,&idx2,&idx3,&idx4
case pcount()=8
set inde to &idx1,&idx2,&idx3,&idx4,&idx5
case pcount()=9
set inde to &idx1,&idx2,&idx3,&idx4,&idx5,&idx6
endc
retu(.t.)
endi
inke(1)
esp=esp - 1
if esp=0
w_key=0
if !lolock(w_key)
exit
endi
esp=3
endi
enddo
****
function lolock(w_key)
w_altera := MsgOkCancel ("Acesso ao Arquivo Denegado - Continua Intentando?")
do whil w_altera == .t.
w_key=inke(3)
if w_altera == .f. .or. w_key=27
rest scree from w_card
retu
else
w_altera := MsgOkCancel ("Acesso ao Arquivo Denegado - Continua Intentando?")
endi
enddo
RETURN w_altera
retu(.f.)Bettu
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Open exclusive em DBF
Uma coisa não comum no seu comando:
O ALIAS é pra quando vai se dar outro nome ao arquivo (dentro do programa).
USE GRACE
ou
USE GRACE ALIAS OUTRONOME
O ALIAS é pra quando vai se dar outro nome ao arquivo (dentro do programa).
USE GRACE
ou
USE GRACE ALIAS OUTRONOME
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/

