delphi下对dbf文件进行物理删除


本文整理自网络,侵删。

 
我们知道,一般的dbf文件执行delete操作都只是对文件进行逻辑删除(对记录做标记,可以恢复),而怎么使记录彻底删除呢?

如下:

procedure PackTable(Table: TTable);
var
  Props: CURProps;
begin
  // 必须以独占方式打开
  if (not Table.Active) or (not Table.Exclusive) then Exit;
  Check(DBIGetCursorProps(Table.Handle, Props));
  // 必须是dBase或FoxPro
  if Props.szTableType <> szDBASE then Exit;
  Check(DBIPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True));
  Table.Open;
end;


procedure BatchPackTable(const sCurrentPath: string);   //dbf文件目录
var 
 SearchRec: TSearchRec; 
 iFindResult:integer; 
 tblBeUndelete: TTable;
begin 
 iFindResult := FindFirst (sCurrentPath + '*.dbf', faAnyFile, SearchRec); 
 while iFindResult = 0 do 
 begin
   Application.ProcessMessages;
   tblBeUndelete :=TTable.Create(W_POS_MainWindow);
   Application.ProcessMessages;
   with tblBeUndelete do 
   begin 
     DatabaseName := sCurrentPath; 
     TableName := SearchRec.Name; 
     TableType := ttDBase; 
     Exclusive := True; 
     Open; 
     Application.ProcessMessages; 
     PackTable(tblBeUndelete); 
     Application.ProcessMessages; 
     Close; 
     Free;
   end; 
   Application.ProcessMessages; 
   iFindResult := FindNext (SearchRec); 
  end; 
 (* 向下搜寻子目录 *) 
 iFindResult := FindFirst(sCurrentPath + '*.', faDirectory, SearchRec); 
 while iFindResult = 0 do 
 begin 
   Application.ProcessMessages; 
   if (SearchRec.Name[1] <> '.') then 
   begin 
     BatchPackTable(sCurrentPath + SearchRec.Name + '\'); 
   end; 
   iFindResult := FindNext(SearchRec); 
 end; 

end;



如果需要对dbf文件进行物理删除,只需要调用BatchPackTable方法。
――――――――――――――――

原文链接:https://blog.csdn.net/camillect/article/details/80568807

相关阅读 >>

Delphi utf8乱码问题

Delphi一个综合实用的单元

Delphi开发linux的动态库

Delphi 判断表字段是否存在

Delphi adoquery filter使用

实现拖动无标题窗口的5种方法

Delphi 调用极光推送服务端http api实例

Delphi 判断是否为二进制文件

Delphi makeuniquefilename 创建文件名如果已经存在自动更改文件名

Delphi 农历源码

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...