Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Pack a un MDB (https://www.clubdelphi.com/foros/showthread.php?t=80814)

courtois 09-07-2007 05:04:36

Pack a un MDB
 
La siguiente función permite compactar una base de datos de access, requiere que se importe la biblioteca de tipos
Microsoft Jet And Replication Objects 2.x
Código Delphi [-]
function PackMdbFile(_Name, _pass: String; Verbose:Boolean): Boolean;
var
   JE : TJetEngine; //requiere importar la biblioteca de tipos MS Jet & Replications Objects
   mdbDest,ConStrOri, ConStrDest: WideString;
   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);
   ConStrOri:= 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source='+
                _Name+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System'+
               ' database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password='+_pass+
               ';Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global'+
               ' Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New '+
               'Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:'+
               'Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet'+
               ' OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';

   ConStrDest:= 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source='+
                 mdbDest+';Mode=Share Deny None;Extended Properties="";Jet OLEDB:System'+
                ' database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password='+_pass+
                ';Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global'+
                ' Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New '+
                'Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:'+
                'Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet'+
                ' OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
   //verificamos si la base de datos destino existe, si es asi, la eliminamos
   if FileExists(mdbDest) then DeleteFile(mdbDest);
   JE:= TJetEngine.Create(Nil);
   try
      try
        //se comprime la base de datos original en la destino, ojo, la base de datos
        //original no debe estar en uso por nadie mas
        JE.CompactDatabase(ConStrOri, ConStrDest);
        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');
        PackMdbFile:=True;
      except
        on E:Exception do
        begin
           __Error:=('Excepcion :'+E.Message);
           PackMdbFile:=False;
        end;
      end;
   finally
      JE.FreeOnRelease;
   end;
end;


La franja horaria es GMT +2. Ahora son las 22:36:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi