Página 1 de 1

"Corruption Detected"

Enviado: 28 Jun 2006 11:25
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.....

Enviado: 29 Jun 2006 10:19
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

Enviado: 29 Jun 2006 12:17
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 !

Enviado: 29 Jun 2006 15:48
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.