Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Compactar y reparar BD Access (https://www.clubdelphi.com/foros/showthread.php?t=23052)

Perio 05-07-2005 17:59:01

Compactar y reparar BD Access
 
Buenasss, como estan todos...

Tengo una consulta de relativa urgencia, necesito compactar y reparar una base de datos Access desde Delphi, Como podria hacerlo?
Supongo que debe existir alguna unit de objetos OLE o algun componente, les agradecería que me ayuden o me orienten como encarar el problema.-

Saludos desde Argentina

Perio

Alexander 05-07-2005 22:18:09

Intenta a ver con este
 
Alguien me envió este código y la verdad no se si funcione.

Intenta funcionar con este a ver. Debes poner JRO_TLB en el uses.

Código:

procedure TfMainForm.P_CompactarClick(Sender:TObject);
var
  JE : TJetEngine; //Jet Engine
  sdbTemp : WideString; //TEMP database
  sdbName : WideString;
 
const
  SProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;DataSource=';
 
begin
  inherited;
  DBM.ADOConnection.Close;
  sdbName := g_sAppPath + g_sPrograma + '.mdb';
  sdbTemp := g_sAppPath + 'TEMP_' + g_sPrograma +'.mdb';
 
  if FileExists(sdbTemp) then
        DeleteFile(sdbTemp);
 
  JE := TJetEngine.Create(Application);
  try
        try
          JE.CompactDatabase(SProvider + sdbName, SProvider + sdbtemp);
          DeleteFile(sdbName);
          RenameFile(sdbTemp, sdbName);
        except
          on E:Exception do
        ShowMessage(E.Message);
        end;
  finally
        JE.FreeOnRelease;
  ShowMessage('Proceso terminado.');
  Close;
  end;
end;


Perio 11-07-2005 16:49:30

sigo sin compactar....
 
Hola Alexander, muchas gracias por tu pronta respuesta, pero sigo con inconvenientes para hacer funcionar el código.
En la linea siguiente del codigo que me pasaste:

JE.CompactDatabase(SProvider + sdbName, SProvider + sdbtemp);

Me tira el error "No se pudo encontrar el archivo ISAM instalable".-
No tengo idea que puede llegar a ser.
Un saludazo desde Argentina.-
Perio

Perio 12-07-2005 22:16:50

Guenasss, como andan todos... pude compcatar la puta base de datos y lo hice asiss:



Código:


//Agregar en la uses
uses JRO_TLB;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  JetEngine1 : TJetEngine;
  DBName: String;
  DataSource, DataDest, DataDestName, Source : String;
begin
        DBName := 'C:\Eduardo_Vadalá_(no_borrar)\data_STT.mdb ';
        //Si no existe, corta el proceso
        if not FileExists(DBName) then
        begin
          Showmessage('Base de Datos no Encontrada');
          Exit;
        end;
        //Ruta de base de datos temporal
        DataDestName := 'C:\WINDOWS\Temp\data_STT.mdb';
        //Si existe lo borra
        if FileExists(DataDestName) then
        begin
          DeleteFile(DataDestName);
          Showmessage('Archivo no Encontrado');
        end;
        DataSource :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DBName+';';
        DataDest :='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataDestName+';';
        dataDest := DataDest +'Jet OLEDB:Engine Type=5';
        JetEngine1 := TJetEngine.Create(self);
        try
          JetEngine1.CompactDatabase(DataSource,DataDest);
          Showmessage('Base de Datos Compactada en: '+DataDestName);
          JetEngine1.Free;
          if DeleteFile(DBName) then
          begin
                if RenameFile(DataDestName,DBName) then
                  Showmessage(DataDestName+ ' Renombrada a: ' +DBName)
                else
                  Showmessage(DataDestName+ ' no Renombrada' +DBName);
          end
          else
                Showmessage('Error: '+DBName+',no pudo ser borrada');
        except
          on E: Exception do Showmessage(E.Message);
        end;
end;

Gracias de todos modos a todos lo que respondieron


La franja horaria es GMT +2. Ahora son las 21:46:07.

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