Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Compactar Base d Datos Access desde Delphi. (https://www.clubdelphi.com/foros/showthread.php?t=45859)

Drakyto 16-07-2007 19:26:25

Compactar Base d Datos Access desde Delphi.
 
Hola compañeros programadores, ahora les tengo otra consulta; cómo puedo compactar una base d datos en Access desde Delphi, existe algún procedimiento sencillo para eso? Gracias d antemano.

droguerman 16-07-2007 20:15:01

a riesgo de equivocarme no creo que se pueda hacer mediante consultas, parece más sencillo hacer un objeto OLE que realize tal operacion

Delfino 16-07-2007 22:48:49

Cita:

cómo puedo compactar una base d datos en Access desde Delphi
Aqui se explica como, ademas estoy seguro q ya se toco este tema en el foro, solo hace falta molestarse en buscar..

eduardo_2009 16-01-2008 00:02:29

Este método esta muy bien...
 
// Compilado en Delphi 7 com Access 2000
// agrega en USES comobj,variants

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;

// llama esta funcion asi: CompactDataBaseDao('datos.mdb');

darkone2k4 09-12-2009 16:09:46

una consulta....

estoy utilizando ese mismo código en Delphi 6 y el 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????

gracias.



GerTorresM 02-01-2010 18:02:35

Prueba este
 
Código Delphi [-]
procedure CompactarBaseDeDatos (BaseDeDatos,contrasena : string);
var DBEngine : OLEVariant;
Begin
  try
    DeleteFile(BaseDeDatos + '2');
    DbEngine := CreateOleObject('Dao.DbEngine.35');
    DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
    DeleteFile(BaseDeDatos);
    RenameFile(BaseDeDatos + '2', BaseDeDatos);
  except
    try
      DeleteFile(BaseDeDatos + '2');
      DbEngine := CreateOleObject('Dao.DbEngine.36');
      DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
      DeleteFile(BaseDeDatos);
      RenameFile(BaseDeDatos + '2', BaseDeDatos);
    except
      try
        DeleteFile(BaseDeDatos + '2');
        DbEngine := CreateOleObject('Dao.DbEngine.120');
        DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
        DeleteFile(BaseDeDatos);
        RenameFile(BaseDeDatos + '2', BaseDeDatos);
      finally
      end;
    end
  end;
end;

darkone2k4 22-02-2010 22:23:29

Cita:

Empezado por GerTorresM (Mensaje 349912)
Código Delphi [-]
procedure CompactarBaseDeDatos (BaseDeDatos,contrasena : string);
var DBEngine : OLEVariant;
Begin
  try
    DeleteFile(BaseDeDatos + '2');
    DbEngine := CreateOleObject('Dao.DbEngine.35');
    DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
    DeleteFile(BaseDeDatos);
    RenameFile(BaseDeDatos + '2', BaseDeDatos);
  except
    try
      DeleteFile(BaseDeDatos + '2');
      DbEngine := CreateOleObject('Dao.DbEngine.36');
      DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
      DeleteFile(BaseDeDatos);
      RenameFile(BaseDeDatos + '2', BaseDeDatos);
    except
      try
        DeleteFile(BaseDeDatos + '2');
        DbEngine := CreateOleObject('Dao.DbEngine.120');
        DbEngine.CompactDataBase(BaseDeDatos, BaseDeDatos + '2', NULL, 0, ';pwd='+contrasena);
        DeleteFile(BaseDeDatos);
        RenameFile(BaseDeDatos + '2', BaseDeDatos);
      finally
      end;
    end
  end;
end;

disculpa la demora en responder...

muchas gracias por la respuesta...


La franja horaria es GMT +2. Ahora son las 14:36:40.

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