请教修复dbf表的方法?(100分)

  • 主题发起人 主题发起人 aries
  • 开始时间 开始时间
A

aries

Unregistered / Unconfirmed
GUEST, unregistred user!
在做一个实时数据接受,非正常退出后,如:死机,断电...dbf文件会损坏,请问如何修复?我不能换别的数据库。
我想在每次非正常退出后重启动时自动运行一段修复数据表的程序,请各位高手帮忙,告诉我一些修复数据表关键的代码怎么写?
 
我在数据库开发中,因用到过去的Foxbase等的数据库,但用Delphi确不能打开,
我只得用Debug修改*.DBF文件的代码,现在就可以了。
你的问题,我想用Inline或BlockRead等是否可将受损的数据库文件结构进行修改,
就可避免因意外条件造成的文件损坏!
 
dbf文件的格式很简单,不知你的文件是怎样损坏的。一般是丢失最后一个字节
dbf文件以1A结束可以在程序中加一个判断,如果最后一个字节不是1A就追加一
个字节1A。
 
dbf文件是由表头、记录和表结束标志构成。表头又由表参数和记录结构表构成,其
具体格式和意义如下:
1。表参数占32个字节,第1个字节为数据库开始标志03H或F5H,如为表中含有M型
字段为F5H,第2-4字节表示最后一次修改表的时间,第5-8字节表示表的记录数,第9-10字节表示表头的长度,第11-12字节表示该表每个记录的长度。其余字节为0H。
2。记录结构表包括各个字段参数,每个字段占32个字节,其中第1-10字节表示字段名,第氏字节表示该字段的类型,13字节表示记录中字段起始位置,第17字节表示该字节的宽度,18字节表示小数位数,其余为00H
3。表头的最后一个字节为结束标志0DH
4。表中记录以ASCII码的形式按字段依次存放,没有字段分隔符,每个记录的第一个字节为删除标志,已删除的为2AH,未删除的为20H
5。文件结束为1AH

如果你的表结构不变的话,可在开始时用二进制把表头(读到0DH)写到一个永久性
文件中,如表结构损坏则把此文件中的相关字段读出写到你的DBF文件中,注意表参数中的第2-8字段(最后修改时间及记录数)不要写。
 
我的情况是:断电重启动后,表仍然可用,但断电前所有纪录的内容都变成了空白!新的纪录仍可以append上去,不知是哪里坏了?
另外,本人是delphi beginner,文件读写不熟,哪位好心贴一段代码上来让在下参考参考,如太长请mail一份,thanks! aries@km169.net
 
你可以看一下DELPHI的帮助,在HELP->MS SDK HELP FILES->WIN32 PROGRAMS REFENCES中
 
faint
搞套修复工具不成了,写信来,我发!
mailto:cjcjc@online.sh.cn
 
多人接受答案了。
 
后退
顶部