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 xe5实现随机大小写字幕或者数字

Delphi tlog 日志

Delphi 判断操作系统是否是64位的函数

Delphi中tstringlist分割字符串的用法

Delphi 收藏字符串处理单元

Delphi gmt时间与tdatetime转换

Delphi repeat until 随机插入

Delphi里实现多线程下载文件并且显示进度到界面

Delphi 防止程序重复执行(多种方法)

Delphi判断驱动器类型

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



打赏

取消

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

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

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

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

评论

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