本文整理自网络,侵删。
我们知道,一般的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 unigi unidbtreegrid展开叠起 unidbgrid自动调节列宽
Delphi (user agent) of a twebbrowser
更多相关阅读请进入《Delphi》频道 >>