PDA

Ver la Versión Completa : Pack a un MDB (usando DAO)


courtois
09-07-2007, 19:25:36
Aqui tenemos otra forma de compactar un MDB, usando DAO, requiere que se añada al uses ComObj


Procedure PackMdbFile(_Name, _pass: String; Verbose:Boolean);
var
e:OleVariant;
mdbDest: string;
sizei,sizef:Real;
begin
sizei:=FileSizeByName(_Name)/1024;
//la base de datos no se compacta sobre si misma sino creauna nueva, compactada
//por lo cual definiremos como se llamará esa base de datos
mdbDest:=ExtractFilePath(_name)+'\tmp~'+ExtractFileName(_Name);
//verificamos si la base de datos destino existe, si es asi, la eliminamos
if FileExists(mdbDest) then DeleteFile(mdbDest);
e := CreateOleObject('DAO.DBEngine.36');
//se comprime la base de datos original en la destino, ojo, la base de datos
//original no debe estar en uso por nadie mas
if _pass = EmptyStr then
e.CompactDatabase(_Name, mdbDest,';LANGID=0x0409;CP=1252;COUNTRY=0',0)
else
e.CompactDatabase(_Name, mdbDest,';LANGID=0x0409;CP=1252;COUNTRY=0',0,';PWD='+_pass);
sizef:=FileSizeByName(mdbDest)/1024;
//eliminamos la base de datos original, o mejor, le cambiamos el nombre
DeleteFile(_Name);
//renombramos la nueva base de datos compactada como se llamaba la base de datos original
RenameFile(mdbDest, _Name);
if Verbose then ShowMessage('Hecho, mdb compactada de '+FloatToStr(sizei)+' Kb a '+FloatToStr(sizef)+' Kb');
end;