Pergunta

Eu estou em um cliente fazendo algumas correções rápidas para o seu aplicativo de acesso. Foi um tempo eu tinha um ir com o acesso, mas estou me recuperando rapidamente. No entanto, eu descobri um problema interessante:

Para alguns relatórios, recebo um erro "O registro é excluído". Eu verifiquei os relatórios, e parece que há um problema com uma tabela. Ao abrir essa mesa, eu encontrar um registro onde todas as colunas são marcadas "# eliminado". Então, obviamente, esta linha parece ser o culpado. No entanto, quando eu tento excluir essa linha, nada realmente acontece. Se eu voltar a abrir a tabela, a linha ainda existe.

Existe uma corrupção no db? Como posso remover este registro para o bem?

Editar: É um MS2000-version

Solução: Simplesmente compressa / reparação não funcionou. I converteu o banco de dados para o formato de arquivo 2003 em vez, que fez o truque. Eu marquei a primeira resposta sugerindo compressa / reparação, uma vez que me apontou na direção certa. Obrigado!

Foi útil?

Solução

Você já tentou a ferramenta construída em / reparação compacto Access? Isto deve liberar registros excluídos do banco de dados.

A localização exata varia de acordo com a versão do Access que você está executando, mas no Access 2003 é em Ferramentas> Banco de Dados Utilitários> Compact e banco de dados de reparação. Algumas versões anteriores do Access tinha duas ferramentas separadas - uma para compacta, um para reparação - mas eles foram acessados ??a partir de um local similar. Se eles são separados na versão o cliente tem, você precisa executar ambos.

Esta deve ser uma operação não-destrutiva, mas seria melhor testar isso em uma cópia do arquivo MDB (desculpas por afirmar o óbvio).

Outras dicas

Tony Toews, Acesso MVP, tem um guia completo para a corrupção:

Corrupt Microsoft Access MDBs FAQ

  • Alguns sintomas de corrupção
  • Determinar a estação de trabalho que causou a corrupção
  • A corrupção provoca
  • Para recuperar seus dados

Como um aparte, descompilar é muito útil para resolver os acontecimentos estranhos quando a codificação e para melhorar os tempos de start-up.

Você também pode tentar este Comando utilitário de linha

// andy

A compactação e importação não vai resolver o problema para o erro relatado, que é claramente um ponteiro corrompido para um campo memorando. A única coisa que você pode fazer é apagar e recriar o registro que está causando o problema. E você precisa encontrar maneiras para editar dados de notas (ou eliminar campos memo - você realmente precisa de mais do que 255 caracteres ou não?) Que não expô-lo ao risco de corrupção. Isso significa evitar controles acoplados em formulários para campos de memorando.

Em vez disso, use uma caixa de texto não acoplada, e no evento OnCurrent do formulário, atribuir os dados atuais de OrigemDoRegistro subjacente do formulário:

  Me!txtMyMemo = Me!MyMemo

Para salvar as edições ao controlo independente, usar o evento AfterUpdate do controle:

  Me!MyMemo = Me!txtMyMemo
  Me.Dirty = False        ' save the whole record

Por que os campos memo sujeito à corrupção? Porque eles não são armazenados na mesma página de dados como os campos não-memo, mas em vez disso, tudo o que está na página de dados principal do registro é um ponteiro para alguma outra página de dados (ou conjunto de páginas de dados se é um grande pedaço de dados) onde os dados memorando real é armazenado. Se não fosse feito desta forma, um registro com um memorando em que seria muito rapidamente exceder o comprimento máximo de registro.

O ponteiro é relativamente fácil corrompido, na maioria das vezes por um problema fatal durante a edição de um controlo dependente. Edição com um controlo independente não elimina totalmente o problema, mas significa que o tempo em que você está exposto a perigo é muito, muito curto (ou seja, o tempo que leva para as duas linhas de código para executar no evento AfterUpdate) .

Além das opções já postei acima, eu usei um outro método simples aswell: Basta criar um novo arquivo MDB e importe todos os objetos daquele corrompido. Não se esqueça de obter do sistema e / ou escondidos objetos quando você ir por este caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top