Registros marcados como excluídos: a principal fonte de divergências
No DBF, excluir não exclui. O registro continua onde estava, um byte muda, e o que acontece depois depende de o programa que lê o arquivo prestar atenção nesse byte.
Como funciona
Todo registro de um DBF começa com um byte de serviço. Um espaço (0x20) significa “ativo”, um asterisco (0x2A) significa “marcado como excluído”. O resto do registro fica intacto.
Os dados só desaparecem fisicamente depois da operação PACK, que reescreve o arquivo mantendo apenas os registros ativos. Até lá, um registro excluído é uma linha perfeitamente legível, e alguns programas até conseguem recuperá-lo (RECALL).
Por que os relatórios divergem
Uma situação típica: um programa mostra 1.638 registros, outro 1.815, um terceiro exporta 1.815 linhas para o Excel, e a contabilidade conta 1.638. Os três estão certos — só estão configurados de jeitos diferentes.
No dBase e no FoxPro o comportamento depende da configuração SET DELETED ON/OFF. Em drivers ODBC é um parâmetro da conexão. Em exportações caseiras depende de o programador ter lembrado desse byte. Conversores genéricos para CSV, na maioria das vezes, não lembram e exportam tudo.
Por isso, a primeira coisa a fazer quando os números não batem é conferir quantos registros do arquivo estão marcados como excluídos. Muito frequentemente a diferença é exatamente essa contagem.
O que fazer com eles
- Ocultá-los — o padrão, e o que a maioria espera. Você vê a tabela do jeito que o aplicativo de produção a vê.
- Mostrá-los junto com o resto — quando você precisa do tamanho total do arquivo ou quer achar dados “perdidos”.
- Mostrar só eles — o modo mais interessante. Você vê exatamente o que foi excluído: às vezes registros removidos por engano, às vezes restos de uma importação que falhou.
Os registros marcados podem ser filtrados e exportados para um arquivo separado — por exemplo, para entregar a quem investiga a causa.
Cuidado com o PACK
Executar o PACK é irreversível: depois, nada além de um backup traz os dados de volta. Ele também muda os números físicos dos registros, então toda referência externa a eles — em índices e em outras tabelas — fica errada.
Pelo mesmo motivo o Tabulens não compacta o arquivo ao salvar as suas edições: os registros alterados são reescritos no lugar, e os demais bytes são copiados como estavam. Os números dos registros permanecem os mesmos.
Perguntas frequentes
Como restauro um registro marcado como excluído?
Limpe a marca, trocando o asterisco por um espaço no byte de serviço. No Tabulens isso é feito pelo menu de contexto da linha, no modo de edição.
Os registros excluídos afetam o tamanho do arquivo?
Sim, ocupam espaço até o arquivo ser compactado. Um arquivo com muitos registros marcados pode ter o dobro do tamanho dos seus dados úteis.
Por que o índice mostra registros que não existem mais?
Os arquivos de índice (.cdx, .ntx) são atualizados à parte. Se a tabela foi editada sem o índice, ele pode estar desatualizado e precisa ser reconstruído.
Grátis para uso pessoal. Seu arquivo não é enviado a nenhum servidor. Versão para Windows — 3.5 MB, sem instalação: detalhes. Para organizações — licença.