为何在连接.dbf数据库时出现"corrupt table/index header"的错误? 急!!! (50分)

  • 主题发起人 主题发起人 kenbe
  • 开始时间 开始时间
K

kenbe

Unregistered / Unconfirmed
GUEST, unregistred user!
各位富翁:我的FOXPRO的数据库(.dbf)是原来就有的, 现在连接它时,老是出现"corrupt table/index header"的错误,
于是就连接不上了,现在的程序一定要用原来的数据库,不能再更改该库,请问各位如何解决?
还有有的没有出现这个框,却出来一个"could not found languang driver"的话,这是什么原因?
 
我也想知道!
 
"corrupt table/index header"是表头或索引坏了
先删除表的索引文件,再打开重建索引,
如果是表头坏了,用hedit工具试试。
 
我能用VFP打开该数据库,别的程序调用也没问题,如果要删除索引表文件及修复,
那该怎样操作?
 
Table.TableType := ttFoxPro
 
BDE只能使用FoxPro25一下版本的dbf文件,可能你的dbf文件版本太高,
建议用ODBC连接你的数据库
 
你是用BDE打开dbf表的吧,如果这样先应在ODBC 中新建一个用户DSN,并选择数据库驱动
程序为fox数据源?Ms visual foxpro driver -->选择??free table directory
并用browse选择FOX表所在的目录设置即可,完成后重新打开BDE就不会出现错误了
 
1.用ODBC建立,在'用户DSN'中按:添加后,选择驱动数据源:MICROSOFT VISUAL FOXPRO DRIVER
2.取一个数据源的名称
3.在DATABASE TYPE中选择数据源类型为:FREE TABLE DIRECTORY,并指定你的DBF库的路径
4.在SQL EXPLORER 中建立一个新的数据驱动联接,选择 MICROSOFT VISUAL FOXPRO DRIVER
后,在此联接的DSN中写上你第2步的名称后应用就OK了
 
见过类似的贴子,可以恢复数据库的可以找一找。个人认为是索引文件丢失的问题
 
我能用VFP打开该数据库,别的程序调用也没问题
这就说明数据库和索引没问题,用ODBC吧,具体方法fbb,kanny_chen已经说的很详细了。
 
:kanny_chen
哪个SQL EXPLORER我不是很明白,是一个什么东西来的,还有,
我这些数据库原来的程序也要用的,我这样做会影响它吗?
还有如果我做好了程序以后,放到哪台机上用的时候,他那台机也要这样设置吗?
我是一个新手,问题较多,
在此先谢了。
 
:fbb
好了,我用你的方法可以连通,但是我看到的数据库内的数据和我用VFP打开的不一样
我那个数据库内的字段全都是字符形的,但是我连接以后,看到的是全都是数字, 有些数字前面还有
负号,那是什么原因?
 
我的问题真的是大富翁里的难题?
怎么没人说了?
我已经没什么分数了.
只能给这么一点点了.
 
这个问题以前用FOXPRO时遇到过.
解决方法:
出现"corrupt table/index header"原因是索引破坏.
方法1.先删除索引表,然后重建.
方法2.先备份此文件,然后在VFP中用ZAP命令将数据清空,然后APPEND FROM 你备份的文件中
将数据导入到的此文件中.
出现"could not found languang driver"如果是用FOXPRO或VFP建的库应该不会出现此问题
除非是用DELPHI的DATABASE DESKTOP工具建的库.
 
"could not found languang driver"
将table.TableType:=ttFoxpro即可
"corrupt table/index header"是表头或索引坏了
先删除表的索引文件,再打开重建索引。

//删除索引文件
Function DeleteIndex(filename:string;tablename:TTable):boolean;
const
_NoIndex: byte = 0;
var
fBeFixed: file of byte;
begin
try
if tablename.DatabaseName='' then
filename:=Trim(filename)
else
filename:=Trim(tablename.DatabaseName+'/'+filename);
tablename.Close;
AssignFile(fBeFixed,filename+'.dbf');
FileMode := 2;

Reset(fBeFixed);
Seek(fBeFixed, 28);
Write(fBeFixed, _NoIndex);
CloseFile(fBeFixed);
if FileExists(filename+'.mdx') then
DeleteFile(filename+'.mdx');
if FileExists(filename+'.cdx') then
DeleteFile(filename+'.cdx');
Result:=True;
except
Result:=False;
end;
end;

//重建索引
Function MakeIndex(filename,indexname:string;tablename:TTable):boolean;
begin
try
if DeleteIndex(filename,tablename) then
begin
tablename.AddIndex(indexname,indexname,[]);
tablename.Open;
Result:=True;
end
else
Result:=False;
except
Result:=False;
end;
end;

 
在FOXPRO里面先试能打开这个表,再把索引删掉,那样
DELPHI里就能打开了,我试过
 
上面几位:谢谢!
我试一下。
 
谢谢各位!
 
后退
顶部