我用如下代码进行access压缩,为什么几十M的内容都看不到一点变化,而用access里面自带的"修复或压缩"却可以压缩到以前的3/4左右?
var zz:OLEVariant;
begin
datamodule1.adoconnection1.Close;
screen.Cursor:=crHourGlass;
zz:=CreateOleObject(zz.DBEngine.36);
zz.CompactDatabase(capture.mdb,temp.mdb);
DeleteFile(capture.mdb);
RenameFile(temp.mdb,capture.mdb);
datamodule1.adoconnection1.Open;
datamodule1.adotable1.Active:=true;
screen.Cursor:=crDefault;
以下代码在:Delphi6.0中测试通过。
原文件: Main.MDB 大小8.52MB
压缩后的文件:NewMain.MDB 大小仅为336K,与手工用ACCESS2002压缩的效果一样
使用单元:……,Variants,comobj;
procedure TForm1.Button1Click(Sender: TObject);
const
Provider = Provider=Microsoft.Jet.OLEDB.4.0;;
var
Myobj:variant;
NewMdbStr,OldMdbStr:string;
begin
NewMdbStr:=Provider+Data Source=NewMain.Mdb;
OldMdbStr:=Provider+Data Source=Main.Mdb;
MyObj:=createoleobject(jro.jetengine.2.1);
MyObj.CompactDatabase(OldMDBStr, NewMDBStr);
end;
{***************************************************************
给你一个DAO维护Access的例子
*
****************************************************************}
unit unAccessTools;
interface
uses Sysutils,ComObj,Dialogs;
function DaoActive(var DaoObject:OleVariant):Boolean;
function DaoCompactDB(const FileName:string):Boolean;
function DaoRepairDB(const FileName:string):Boolean;
implementation
function DaoActive(var DaoObject:OleVariant):Boolean;
begin
Result:=False;
try
DaoObject:=GetActiveOleObject(DAO.DBEngine.36);
Result:=True;
except
try
DaoObject:=CreateOleObject(DAO.DBEngine.36);
Result:=True;
except
DaoObject:=Null;
end;
end;
end;
//压缩Access数据库
function DaoCompactDB(const FileName:string):Boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
TempFile:=ExtractFilePath(FileName)+msaTemp.mdb;
db.CompactDatabase(FileName,TempFile);
DeleteFile(FileName);
RenameFile(TempFile,FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;
//修复Access数据库
function DaoRepairDB(const FileName:string):Boolean;
var
db:OleVariant;
begin
Result:=False;
try
if not DaoActive(db) then
Exit;
try
db.RepairDatabase(FileName);
Result:=True;
except
on E:EOleException do
ShowMessage(E.Message);
end
finally
db:=Unassigned;
end;
end;
end.
告诉我信箱,我发给你代码!