Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Compactar y Reparar Base de Datos en Access (https://www.clubdelphi.com/foros/showthread.php?t=80518)

dec 29-06-2006 23:25:19

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;

darkone2k4 09-12-2009 16:07:14

gracias x el código, muy bueno.

el único problema que tengo es que una vez realizado el proceso de compactar me da el siguiente error:

Exception EOleException in module Captura.exe at 000A1C48.
Error de autenticación.

Alguien sabe a qué se debe????


La franja horaria es GMT +2. Ahora son las 23:56:18.

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