Access数据库中有Ole对象用来存放文件,存放大量文件后,数据库文件变得很大,如果此时把数据库里面存放的文件删除,数据库文件大小基本上没有什么变化。
  要怎么才能在程序里优化数据库文件的大小呢??

解决方案 »

  1.   

    const
        SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;';function GetTempPathFileName:string;
    var
        SPath, SFile:array [0..254] of char;
    begin
        GetTempPath(254, SPath);
        GetTempFileName(SPath, '~SM', 0, SFile);
        result := SFile;
        DeleteFile(PChar(result));
    end;procedure CompactDB(const DBFile: string);
    var
        vje: OleVariant;
        STempFileName: string;
    begin
        STempFileName := GetTempPathFileName;
        try
            vje := CreateOleObject('JRO.JetEngine');
            vje.CompactDatabase(
                format(SConnectionString,[DBFile, '']),
                format(SConnectionString,[STempFileName, '']));
            CopyFile(PChar(STempFileName), PChar(DBFile), False);
            DeleteFile(STempFileName);
        finally
        end;
    end;
      

  2.   

    var
    dbe:OleVariant;
    begin
    dbe:=CreateOleObject('dao.dbengine.36');
    dbe.CompactDatabase('D:\aa.mdb','d:\bb.mdb','',0,';pwd= ');
    end;
    或者
    use dao97
    var AccessEngine :DBEngine;
    AccessEngine:=CoDbEngine.Create;
    AccessEngine.CompactDatabase('D:\aa.mdb','d:\bb.mdb','',0,';pwd=');