Página 1 de 1
Abertura de arquivos ao mesmo tempo
Enviado: 10 Set 2011 19:35
por querentino
Ólá pessoal, estou aqui novamente pedindo ajuda a todos.
Bem tenho um sistema em rede, e quando tento chamar uma rotina que abre um .dbf da um erro, e percebi que acontece esse erro quando a rotina e chamada ao mesmo tempo em dois terminais. Como devo proceder para que não aconteça esse erro. Error dbfcdx/1012 Corrution detected: d:\karvan\dados.dbf
Código: Selecionar todos
FUNCTION DADOS2
USE d:\KARVAN\DADOS SHARED
IF NETERR()=.T.
INKEY(0.1)
DADOS2()
ENDIF
uso clipper 5b, blinker 7.0
Desde já agradeço a todos do forum.
Abertura de arquivos ao mesmo tempo
Enviado: 10 Set 2011 22:19
por alxsts
Olá!
Aparentemente, observ ando o que diz a mensagem de erro, o problema é corrupção de dados. Experimente copiar a estrutura vazia desta tabela para outra tabela. Depois abra a tabela vazia e faça um append from da tabela com problema.
Na abertura, acrescente a cláusula NEW:
Abertura de arquivos ao mesmo tempo
Enviado: 11 Set 2011 10:22
por Eolo
A função do Querentino é recursiva, ou seja, ela chama ela mesma até que NETERR=.F.
Entao, se NETERR sempre retornar .T. (por ex, se o drive D: não existir), a função vai entrar em loop infinito. E, a cada loop, a pilha (stack) será incrementada, podendo causar estouro (stack overflow).
Talvez isto seja pouco provável de acontecer, mas dá pra evitar usando um CONTADOR.
Código: Selecionar todos
* função 'pai'
* ...
do whil .t.
* abre arquivos
if dados2()=.t.
* arquivo aberto
exit
else
* incapaz de abrir arquivo
return
endi
endi
* ...
Código: Selecionar todos
function dados2
priv contador:=0
do whil .t.
contador++
if contador=6 // na 6a. tentativa, interrompe
return .f.
endi
use d:\KARVAN\DADOS SHARED new
if neterr()=.t.
inkey(0.1)
else
return .t.
endi
endd
Abertura de arquivos ao mesmo tempo
Enviado: 11 Set 2011 16:02
por querentino
Ele não dava erro no loop, o erro era na linha use... ai é que eu não sabia qual era o problema, se na rede ou servidor, levei para outra empresa e o erro continuou. Consegui resolver o problema ontem mudando para clipper 5.3b.
Agradeço a colaboração do amigo Alxsts e Eolo pelas dicas e gostei da rotina do Eolo.