对不起,老大,上次没实做,这次贴全了:)
先压缩创建一个新文件,然后再覆盖原文件就行,Access也是这么干的。
procedure TForm1.Button1Click(Sender: TObject);
var
ovDAO: OleVariant;
DBFileName, DBFileName1: string;
begin
ADOConnection1.Close; //压缩之前要关闭数据库
DBFileName := 'D:/Cost2001/System/Catalog.mdb';
DBFileName1 := 'D:/Cost2001/System/Catalog.$$$';
ovDAO := CreateOleObject('jro.JetEngine');
ovDAO.CompactDataBase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source = ' + DBFileName,
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source = ' + DBFileName1);
CopyFile(PChar(DBFileName1), PChar(DBFileName), False); //覆盖原文件
DeleteFile(DBFileName1); //删除临时文件
ADOTable1.Open;//重新开表
end;