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方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值