"Corruption Detected"

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

"Corruption Detected"

Mensagem por matrix »

Pessoal,

estive lendo outros topicos e ainda naum encontrei algo concreto que me dê uma idéia real...

nas vendas abro todos os arquivos necessários com seus respectivos indices, e se faz vendas de produtos e após + ou - 10 vendas corrompe os indices, e é necessário a reindexaçao...... faço desa forma:

Use &cCam1\BD_QTD
If Neterr()
Alert(" Arquivo sendo executado na Rede! ")
Close
Return .F.
Endif
ARQ=" CODQTD "
INDEX on CODIGO_QTD to &cCam2\CODQTD eval mostra(l,c,ARQ) every 6
ARQ=" LEIQTD "
INDEX on LEITOR_QTD to &cCam2\LEIQTD eval mostra(l,c,ARQ) every 6

o q vcs acham que devo fazer pra resolver isso? trocar de indices NTX, reindexar de outra forma.

abro os arquivos assim:
Select 4
Use &cCam1\Mov_Sai Index &cCam2\MovSPed,&cCam2\MovSDt,&cCam2\MovSNot Shared


agradeço dicas.....
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Raul
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 07 Jun 2006 09:55

Mensagem por Raul »

Olá Matrix,

Há muito tempo atrás, quando comecei a programar em ambiente multiusuário, tive problemas com "corruption detected" também. Após conhecer uma pequena técnica este problema diminuiu em mais de 95% para minhas aplicações.

Esta técnica é bem simples. Abras os arquivos normalmente com seu respectivos índices, porém, no momento em que fores executar o replace (inclusão/alteração) sete a ordem do índice para 0 (zero) e após o commit, retorne novamente a ordem para o índice original.

O índice permanece aberto, porém o Clipper somente ignora-o no momento do replace. Mesmo que algum campo que componha o índice seja modificado, o Clipper fará o update do índice normalmente.

Esta pequena forma de fazer o replace permite que os índices sejam atualizados mais rapidamente e com mais segurança por que ele é feito de uma vez só.

Experimente, não vai custar nada! :o)

Um abraço,

Raul
Novo Hamburgo - RS
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Mensagem por alaminojunior »

Desculpe meu caro, não entendi muito bem como vc faz para abrir os bancos e indices !
Tente fazer do modo "Arroz c/ Feijão" como segue :

SELE 1
USE BANCO1 SHARED
SET INDEX TO INDICE1, INDICE2, ....

SELE 2
USE BANCO2 SHARED
SET INDEX TO INDICE3, INDICE4 ....

Fica mais claro até para o Clipper, e tenho certeza que desta forma, vc não irá ter problemas.

Este erro que está gerando, é devido ao fato de algum indice não estar aberto no momento da atualização. Posteriormente na hora de emitir um Seek, como o tal indice não foi atualizado, acontece isso !
Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

Mensagem por matrix »

*abro os indices dessa forma:
Select 1
Use Bd_Cli Index CodCli,NomCli Shared

*Pra selecionr um indice pra busca por exemplo faço:
Select Bd_cli
Set Order to 1
Dbseek(nCodigo)

*Gravo
Replace CODIGO With nCodigo
Commit

*Pra criar os indices:
Use Bd_Cli
If Neterr()
Alert(" Arquivo sendo executado na Rede! ")
Close
Return .F.
Endif
ARQ=" CODCLI "
INDEX on CODIGO to CODCLI eval mostra(l,c,ARQ) every 6
ARQ=" NOMCLI "
INDEX on NOME to NOMCLI eval mostra(l,c,ARQ) every 6


Isso aí, o pessoal tá me passando que pode ser problema no HD da maquina, vamos verificar isso.
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Responder