Abertura de arquivos ao mesmo tempo

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

querentino
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 28 Jan 2009 19:53
Localização: Guarulhos - São Paulo

Abertura de arquivos ao mesmo tempo

Mensagem 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.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Abertura de arquivos ao mesmo tempo

Mensagem 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:

Código: Selecionar todos

USE d:\KARVAN\DADOS SHARED NEW
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Abertura de arquivos ao mesmo tempo

Mensagem 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
querentino
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 28 Jan 2009 19:53
Localização: Guarulhos - São Paulo

Abertura de arquivos ao mesmo tempo

Mensagem 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.
Responder