如何在delphi中调用accsee数据库自带的那个数据压缩的功能?
或者delphi中有没有方法实现?不胜感激!

解决方案 »

  1.   

    {From 超级猛料}对access数据库维护{*************************************************************** 
    *
    * Unit Name: unAccessTools
    * Purpose : Provide tools to compact and repair Access database.
    *
    ****************************************************************}
    unit unAccessTools;interfaceuses Sysutils,ComObj,Dialogs;function DaoActive(var DaoObject:OleVariant):Boolean;
    function DaoCompactDB(const FileName:string):Boolean;
    function DaoRepairDB(const FileName:string):Boolean;implementationfunction 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.