Delphi重建与删除Foxpro(DBF)数据库索引文件CDX

来源:互联网 发布:aptget卸载软件 编辑:程序博客网 时间:2024/05/19 19:15

我发现DBF文件数据的一个大秘密,因为要用到TBatchMove操作DBF文件,需要使用索引,如果这个DBF文件没有包含索引,可以使用下面的

 

SQL建立索引:

 

create index 索引名 on "表名.dbf"(字段名);

 

但是如果这个DBF文件已经包含索引,可是这个CDX索引文件坏了或是丢失了,用上面的SQL会提示'Index does not exist.File or

 

directory does not exist.这时候重新创建索引就失败,但是我们可以把这个DBF文件修改为不包含索引文件的类型:修改这个文件的第28个

 

字节为0就可以了,

 

procedure TForm1.Button7Click(Sender: TObject);
const
  NoIndex:Byte=0;
var
  fByte:file of byte;
begin
  AssignFile(fByte,'csfzk.dbf');
  FileMode:=2;
  Reset(fByte);
  Seek(fByte,28);
  Write(fByte,NoIndex);
  CloseFile(fByte);

end;

 

这样,先把索引文件标识删除了,并把索引文件CDX删除了,再用上面的SQL创建这个CDX文件就好了,不然会提示:'Index already exists';

 

删除一个DBF文件的索引用下面的SQL:

 

drop index "表名.dbf".zch

 

在Delphi中执行和Foxpro中一样的命令:pack all,用下面代码:

 

需用引用Uses DBiTypes,DBiProcs,DBiErrs三个单元

  tbUpdate.Close;

  tbUpdate.TableName:='csfzk.dbf';
  tbUpdate.Exclusive:=true;
  tbUpdate.Open;
  DbiPackTable(tbUpdate.DBHandle,tbUpdate.Handle,nil,szFOXPRO,True);
  tbUpdate.Close;

 

如果这个DBF文件包含索引,会把所有记录连同这个索引文件CDX一同删除,这时可以用上面的方法,先创建这个DBF文件的索引文件CDX,然后

 

把这个DBF文件修改为不包含索引的文件类型,这时需用索引的操作可以进行,而删除记录时也不会把索引给删除了,岂不一举两得!

 

原创粉丝点击