如果使用vfp打开dbf文件,甚至是使用VFP编写的程序打开的dbf文件,如果遇到“not a table”的错误提示,请遵循如下的解决办法。
一、原因所在
由于vfp或VFP程序经历过突然断电或非法关机的操作,或者程序非法关闭等原因,导致Foxpro数据库.DBF文件被破坏。
二、解决的办法
①用Pctools、NU的Diskedit等工具软件进行恢复
运行Pctools,选中无法打开的数据库,按E文件进入编辑功能,按F1切换显示模式。
按F3进行编辑,将开始的第5个字节值减1,按F5存储,然后退出Pctools,启动Foxpro, 发现被破坏的数据库可以打开使用了。
由于许多操作者并不一定熟悉如何使用Pctools,因此我建议大家可以用比较熟悉的Excel程序根据下面的步骤来进行数据库的恢复。
②用Excel进行恢复
启动Excel,选择"打开"按钮,出现打开对话框,在打开文件类型中选择Dbase/Foxpro(*.DBF)文件类型,再选中被破坏的数据库打开,这时不要做更改,只选择"保存"按钮,会出现"另存为"对话框,仍选择以原来文件名保存,会提示"文件已经存在,是否替换已有文件?",选择"是"。
然后选择"文件"菜单上的"关闭",会出现提示"数据库文件不是Excel格式,要保留修改吗?
要保存为Excel格式,单击'是',然后在'保存类型'下拉列表框选'Excel工作簿';
要用现有格式保存并替换原来的文件,单击'是',然后单击'保存';
要在关闭文件时维持现有格式并不作保存,单击'否'。"
由于我们并没有对数据库的记录进行改动,只是为了恢复数据库,所以选择最后一项"在关闭文件时维持现有格式并不作保存",因此单击"否",退出Excel。
启动Foxpro,再次打开数据库文件,发现数据库文件已可以被打开了,但是观察数据库的结构,会发现数据库结构中的索引不见了,不过数据库的索引文件还存在。我们只需要给数据库Add索引,并选择原来的索引文件Open即可。
知识拓展:使用代码来解决
ZX = CREATEOBJECT('excel.application')
zx.visible=.t.
zx.Workbooks.Open("d:\zz\GRES2.DBF")
R=zx.SHEETS(1).UsedRange.ROWS.COUNT &&有数据的总行数
C=zx.SHEETS(1).UsedRange.COLUMNS.COUNT &&有数据的总列数
zx.Cells(R,C).Select &&选中数据
zx.ActiveWorkbook.SaveAs('d:\zz\TEST.DBF',8) &&另存为DBF
zx.ActiveWorkbook.saved=.t. &&不保存当前EXCEL表
zx.ActiveWorkbook.close &&关闭表
zx.quit &&退出EXCEL
RELEASE zx &&释放变量
&&TEST.DBF即为修改后的DBF