Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Compactar y Reparar Base de Datos en Access

Para compactar una Base de Datos en Access:

Código Delphi [-]
var Dir: string; // contiene el directorio
                 // en dónde se encuentra el fichero de datos

function GetEngine(var DbEngine: Variant): Boolean;
begin
Result := False;
try
    DbEngine := CreateOleObject('Dao.DbEngine.35'); // Para Access'97
except
    try
      DbEngine := CreateOleObject('Dao.DbEngine.36'); // Para Access 2000
    except
       ShowMessage('No es posible inicializar el DAO.'#13 +
          'Microsoft DAO debe de estar instalado en este equipo.'#13 +
          'Para instalarlo, debes saber que forma parte de '+
          'MS Access, Visual Basic, MS Office, etc.');
       Exit;
    end;
end;
Result := VarType(DbEngine) = VarDispatch;
end;

function CompactDataBaseDao(DbAccessName: String): Boolean;
var
   DbEngine: Variant;
   TmpFile: String;
begin
Result := False;
if Dir = '' then Exit;

TmpFile := Dir + 'TmpAccess.Mdb';
if Pos( '.MDB', UpperCase(DbAccessName)) = 0 then
   DbAccessName := DbAccessName + '.MDB';

if not FileExists(DbAccessName) then Exit;

try
  if not GetEngine(DbEngine) then Exit;
  if FileExists(TmpFile) then
     DeleteFile(TmpFile);
  // Antes de compactar la Base de Datos, ésta se repara.
  DbEngine.CompactDataBase(DbAccessName, TmpFile);
  DeleteFile(DbAccessName);
  RenameFile(TmpFile, DbAccessName);
  // En caso de caida del sistema aquí, tendremos la base compactada en TmpFile.
  Result := True;
except
  Exit;
end;
end;
Responder Con Cita