频道分类

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

作者:admin 来源: 日期:2020/4/1 11:02:45 人气: 标签:

 
我们知道,一般的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