Recuperar arquivo DBF danificado
Moderador: Moderadores
Recuperar arquivo DBF danificado
Olá pessoal,
Já procurei aqui no forum e vi algumas soluções indicando o filefix, recoverdbf, etc... mas não adiantou.
Teria como recuperar um arquivo DBF através de algum programa feito em harbour ?
Tenho um arquivo que o cabeçalho está corrompido e eu estava pensando se alguém teria alguma solução usando o fread/fwrite para identificar e corrigir este tipo de problema.
Obrigado,
Rossine.
Já procurei aqui no forum e vi algumas soluções indicando o filefix, recoverdbf, etc... mas não adiantou.
Teria como recuperar um arquivo DBF através de algum programa feito em harbour ?
Tenho um arquivo que o cabeçalho está corrompido e eu estava pensando se alguém teria alguma solução usando o fread/fwrite para identificar e corrigir este tipo de problema.
Obrigado,
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Recuperar arquivo DBF danificado
Olá,
Só para esclarecer sobre o erro que está ocorrendo.
O erro ocorrido é:
Error DBFCDX/1012 Corruption detected: TESTE.DBF
Obs: Este arquivo não tem campo MEMO.
Obrigado,
Rossine.
Só para esclarecer sobre o erro que está ocorrendo.
O erro ocorrido é:
Error DBFCDX/1012 Corruption detected: TESTE.DBF
Obs: Este arquivo não tem campo MEMO.
Obrigado,
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Recuperar arquivo DBF danificado
Oi Rossine,
En Harbour, desconheço algum aplicativo. Até agora o melhor que eu conheço é o FileFix do antigo Norton Utilities. E ele recupera a estrutura do dbf importando desde outro dbf que não esteja baleado.
sds
En Harbour, desconheço algum aplicativo. Até agora o melhor que eu conheço é o FileFix do antigo Norton Utilities. E ele recupera a estrutura do dbf importando desde outro dbf que não esteja baleado.
Facilita, ainda bem. Se bem que para recriar DBTs é facil.rossine escreveu: Este arquivo não tem campo MEMO.
sds
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Recuperar arquivo DBF danificado
Olá Pablo,
Eu tentei rodar o filefix.exe mas ele está em 16bits e estou usando o windows 7 em 32 bits.
Existe ele para 32bits ?
Obrigado,
Rossine.
Eu tentei rodar o filefix.exe mas ele está em 16bits e estou usando o windows 7 em 32 bits.
Existe ele para 32bits ?
Obrigado,
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Recuperar arquivo DBF danificado
Lamentavelmente não. Tente numa maq antiga ou utilize um emulador.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Recuperar arquivo DBF danificado
Poxa!
Da vez que precisei, acho que usei o PCTOOLS!
//Hoje é antivírus nada a ver...
Usei para reconstruir o HEAD do DBF usando um 80286... bons tempos!
Saudações,
Itamar M. Lins Jr.
Da vez que precisei, acho que usei o PCTOOLS!
Usei para reconstruir o HEAD do DBF usando um 80286... bons tempos!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Recuperar arquivo DBF danificado
Conheço e tenho os seguintes:
FileFix
FixDBF = QuickFix
FixHead
Não sei se são todos 16 bits, mas rodou no XP aki tranquilo via emulador, se vc tem eles instala numa Maquina Virtual um SO tipo XP q vc roda eles.
Se não tiver como e quiser mandar o DBF q rodo aki e se der certo te devolvo corrigido.
[]´s
FileFix
FixDBF = QuickFix
FixHead
Não sei se são todos 16 bits, mas rodou no XP aki tranquilo via emulador, se vc tem eles instala numa Maquina Virtual um SO tipo XP q vc roda eles.
Se não tiver como e quiser mandar o DBF q rodo aki e se der certo te devolvo corrigido.
[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Recuperar arquivo DBF danificado
Olá Fladimir,
O problema é ao que parece que o tal antivirus kapersky detonou vários dbf's no meu cliente ou o HD dele tá pifando.
Eu consegui desenvolver uma solução onde eu ignoro uma porção inicial do dbf onde tem o header do dbf e formato os registros.
Aparentemente deu certo, mas em partes pois vejo dois problemas neste método que criei:
1) não tem como saber quais registros estavam excluidos.
2) Alguns ou vários registros pode desaparecer.
O que eu fiz foi ler o arquivo usando o fread e depois gravando os registros em um arquivo .txt e depois fiz um append from sdf.
Sobre este método que criei, o que vocês acham ou sugerem.
Obrigado,
Rossine.
O problema é ao que parece que o tal antivirus kapersky detonou vários dbf's no meu cliente ou o HD dele tá pifando.
Eu consegui desenvolver uma solução onde eu ignoro uma porção inicial do dbf onde tem o header do dbf e formato os registros.
Aparentemente deu certo, mas em partes pois vejo dois problemas neste método que criei:
1) não tem como saber quais registros estavam excluidos.
2) Alguns ou vários registros pode desaparecer.
O que eu fiz foi ler o arquivo usando o fread e depois gravando os registros em um arquivo .txt e depois fiz um append from sdf.
Sobre este método que criei, o que vocês acham ou sugerem.
Obrigado,
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Recuperar arquivo DBF danificado
Amiguinhos,
O arquivo apresenta erro de corrupção por falta do .DBT/.FPT ou o .DBT/.FPT possa estar danificado.
Nestes caso uma cópia do .DBT/.FPT novo pode resolver.
Recrie em outro lugar o .DBF afetado de forma que o .DBT/.FPT novo seja criado e então copie o .DBT/.FPT novo para junto do .DBF danificado.
Outra forma de manipular um .DBF sem o arquivo memo poderia acontecer caso o bit que controla esta característica seja desligado.
DBF File structure
Quanto a registros deletados, deve haver um flag na estrutura do registro que indique este atributo. Ouvi a muito tempo atrás que tinha a ver com o caracter *(asterisco).
Em relação a sua rotina, coloque na sessão dicas, será muito util.
O arquivo apresenta erro de corrupção por falta do .DBT/.FPT ou o .DBT/.FPT possa estar danificado.
Nestes caso uma cópia do .DBT/.FPT novo pode resolver.
Recrie em outro lugar o .DBF afetado de forma que o .DBT/.FPT novo seja criado e então copie o .DBT/.FPT novo para junto do .DBF danificado.
Outra forma de manipular um .DBF sem o arquivo memo poderia acontecer caso o bit que controla esta característica seja desligado.
DBF File structure
Quanto a registros deletados, deve haver um flag na estrutura do registro que indique este atributo. Ouvi a muito tempo atrás que tinha a ver com o caracter *(asterisco).
Em relação a sua rotina, coloque na sessão dicas, será muito util.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Recuperar arquivo DBF danificado
Nunca tinha visto o antivirus detonar DBFs, q coisa hein, pq será q fez isso? (assunto pra sessão bate papo)
Fora isto o q vc fez, ao meu ver não poderia ser a solução definitiva, mas servir de base pra tentar em conjunto com as dicas do Rochinha tentar tipo transplantar os dados q vc recuperou para um DBF "saudável" de mesma estrutura.
Mas não sou expert no assunto, talvez outro colega possa contribuir.
[]´s
Fora isto o q vc fez, ao meu ver não poderia ser a solução definitiva, mas servir de base pra tentar em conjunto com as dicas do Rochinha tentar tipo transplantar os dados q vc recuperou para um DBF "saudável" de mesma estrutura.
Mas não sou expert no assunto, talvez outro colega possa contribuir.
[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Recuperar arquivo DBF danificado
Olá!
O OP informa que o DBF não possui campo memo.
Sei que já encontrou uma solução mas, se pelo menos consegue abrir o arquivo com USE, pode fazer uma leitura de início ao fim, dentro de um DO WHILE contendo uma estrutura BEGIN SEQUENCE... END SEQUENCE, gravando os registros em outro DBF de estrutura igual. Quando ocorresse um erro, no bloco RECOVER tentar recuperar pelo menos o Recno() do registro onde ocorreu o erro e ignorar o registro, dando SKIP e LOOP. Se quiser se aprofundar, veja DBF File structure
O OP informa que o DBF não possui campo memo.
Sei que já encontrou uma solução mas, se pelo menos consegue abrir o arquivo com USE, pode fazer uma leitura de início ao fim, dentro de um DO WHILE contendo uma estrutura BEGIN SEQUENCE... END SEQUENCE, gravando os registros em outro DBF de estrutura igual. Quando ocorresse um erro, no bloco RECOVER tentar recuperar pelo menos o Recno() do registro onde ocorreu o erro e ignorar o registro, dando SKIP e LOOP. Se quiser se aprofundar, veja DBF File structure
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Recuperar arquivo DBF danificado
Tá certo isso?Eu tentei rodar o filefix.exe mas ele está em 16bits e estou usando o windows 7 em 32 bits.
Cheguei a rodar aqui em Windows 7 32 bits.
Ele se perde um pouco ao carregar, quanto a localizar diretórios, e basta ESC/ignore, não lembro exatamente.
E se for um disco grande, ele também pode se perder pela limitação da época DOS.
A saída pra esta última ocorrência, talvez usar um pen drive que tem espaço em disco limitado.
Independente disso, o Windows 7 tem o download do XP Mode.
É tipo um VirtualPC que já vém com um XP pré-instalado.
Então teria um XP 32 bits dentro do Windows 7 64 bits - acho mais provável seu Windows ser este.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Recuperar arquivo DBF danificado
Nossa passou por alto esse detalhe. Não deparei com o que o colega disse sobre o Windows en 32bits.JoséQuintas escreveu:Tá certo isso?
Cheguei a rodar aqui em Windows 7 32 bits.
Ele se perde um pouco ao carregar, quanto a localizar diretórios, e basta ESC/ignore, não lembro exatamente.
Eu ainda continuo usando e é como você disse JoséQuintas, ele até funciona se perde um pouco. Também experimentei em disquete e deve funcionar em pendrives também.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Recuperar arquivo DBF danificado
Eu fiz uma busca no Google por "dbf repair" e consegui os seguintes resultados relevantes:
- https://online.officerecovery.com/pt/dbf/
http://www.abri.net/recover/recover.php
http://www.whitetown.com/fr/dbf-recovery/
http://www.stellarinfo.com/database-rec ... covery.php
http://www.dbf2002.com/dbf-recovery/
https://www.datanumen.com/dbf-repair/
https://www.repairtoolbox.com/dbfrepair.html
http://www.dbfdoctor.com/
Qatan
Harbour
Harbour
Recuperar arquivo DBF danificado
Olá Pessoal,
Primeiramente obrigado a todos que se manifestaram.
Sobre o filefix o que ocorreu foi uma mensagem que o administrador do windows me retornou falando da seguinte mensagem:
Aí eu escolhi a opção de FECHAR, mas depois que postei a mensagem no grupo, rodei novamente o filefix e escolhi a opção IGNORAR e ele rodou, mas os registros não foram recuperados corretamente. Ocorreu que ele a cada registro , saltava uma linha em branco e os dados não foram recuperados corretamente.
Em relação a minha solução, eu simplesmente li o arquivo como se fosse um .TXT através do fread/fseek/fwrite e gerei ele no padrao .TXT.
Para quem estiver interessado, veja o código abaixo:
Esta foi a maneira de encontrei aqui para ler um DBF que o comando USE não conseguia abrí-lo e nem um outro programa.
ATENÇÃO: Os dados retornados tem que ser analisados com cuidado, pois pode-se perder, poucos ou vários registros e também aparecer registros duplicados ou deletados.
Ainda falta ver se tem como identificar se o registro está deletado e ignorá-lo neste caso.
Se alguém conseguir melhorar o código ou dar alguma dica, sinta-se a vontade.
T+
Rossine.
Primeiramente obrigado a todos que se manifestaram.
Sobre o filefix o que ocorreu foi uma mensagem que o administrador do windows me retornou falando da seguinte mensagem:
Código: Selecionar todos
16 bit MS-DOS SubSystem
Administrador: Prompt MS-DOS - filefix
An application has attempted directly access the hard disk which cannot be
supported. This may cause the application to function inccortly. Choose 'close'
to terminate the application.
FECHAR IGNORAR
Em relação a minha solução, eu simplesmente li o arquivo como se fosse um .TXT através do fread/fseek/fwrite e gerei ele no padrao .TXT.
Para quem estiver interessado, veja o código abaixo:
Código: Selecionar todos
*************
function main( cFileBad, cFileGood, nTam, nSalto )
*************
local nCtd := 0, cBuffer, nLen, nHandle, nHandle2, cData, nPos
__DefaultNIL( @nTam, "" )
__DefaultNIL( @nSalto, "" )
cls
@0, 0 say " <<< Recuperador de DBF >>> (Versao 1.0)"
if empty(nTam)
? ""
? "Modo de usar:"
? "recupdbf arq_estragado.dbf arq_bom.dbf nTamanho_registro nsalto_Inicial"
? ""
? " Exemplo: recupdbf contas.dbf new.dbf 439 556"
? ""
? ""
? ""
quit
endif
if !file( cFileBad )
? ""
? "O Arquivo que esta ESTRAGADO, nao existe..."
? ""
? ""
? ""
quit
endif
if !file( cFileGood )
? ""
? "O Arquivo que esta BOM, nao existe..."
? ""
? ""
? ""
quit
endif
nTam := val(nTam)
if nTam <= 0
? ""
? "O <tamanho do registro> deve ser maior que ZERO..."
? ""
? ""
? ""
quit
endif
nSalto := val(nSalto)
if nSalto < 0
? ""
? "O <Salto inicial> deve ser igual ou maior que ZERO..."
? ""
? ""
? ""
quit
endif
cBuffer := space(nTam)
nLen := nTam
nHandle := FOpen(cFileBad)
if Ferror() = 0
nHandle2 := fcreate( "recupdbf.txt", 0 )
if FError() != 0
? "Erro ao criar o arquivo RECUPDBF.TXT...", FError()
quit
endif
cData := ""
if nSalto > 0
fseek( nHandle, nSalto, 0 )
endif
nLen := FRead( nHandle, @cBuffer, nLen )
@18,01 say "*** Iniciando leitura do arquivo..."
@22, 01 say "[ESC] abortar"
do while nLen > 0
if inkey() = 27
@22, 01 say "*** Importacao abortada pelo usuario..."
exit
endif
nCtd += 1
@19, 01 say "*** Lendo Bloco: " + hb_ntos(nCtd)
if nLen < nTam
cData := left( cBuffer, nLen )
else
cData := cBuffer
endif
cData += chr(13) + chr(10)
fwrite( nHandle2, cData, len(cData) )
nLen := FRead( nHandle, @cBuffer, nLen )
enddo
FClose( nHandle )
FClose( nHandle2 )
@19,01 say "*** Importando dados para o arquivo " + cFileGood + ". Aguarde..."
use ( cFileGood ) exclusive
zap
append from "recupdbf.txt" sdf
@20,01 say "*** Final de Importacao. Tecle ENTER..."
inkey(0)
go top
browse()
cls
@20,01 say "*** Executando o comando PACK. Aguarde..."
pack
close all
@21, 01 say "*** Foi gerado o novo arquivo: " + cFileGood
else
@21, 01 say "*** Nao consegui abrir o arquivo: " + cFileBad + " - Erro: " + hb_ntos(Ferror())
endif
return NIL
// EOF //
ATENÇÃO: Os dados retornados tem que ser analisados com cuidado, pois pode-se perder, poucos ou vários registros e também aparecer registros duplicados ou deletados.
Ainda falta ver se tem como identificar se o registro está deletado e ignorá-lo neste caso.
Se alguém conseguir melhorar o código ou dar alguma dica, sinta-se a vontade.
T+
Rossine.
Rossine.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.
Harbour 3.4, MingW / Msvc, QT, Qt5xhb, GtQtc, DbfCdx, MySql/MariaDB.

