Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Сжать и сохранить базу Access   Найти похожие ветки 

 
makle ©   (2005-06-06 15:31) [0]

Как программно из Delphi сжать базу Access? (то, что выполняется в самом аксесе в меню сервис)


 
Digitman ©   (2005-06-06 15:35) [1]

объект DAO.DBEngine имеет метод RepairDatabase().

именно этот метод вызывает Access по команде юзера сжать базу


 
sniknik ©   (2005-06-06 16:16) [2]

объект JRO.JetEngine имеет метод CompactDatabase().

именно этот метод вызывает Access по команде юзера сжать базу

;о))


 
DSKalugin ©   (2005-06-06 17:13) [3]


{Программное сжатие базы данных Access используя JRO (Jet Replication Objects)

Процедура позволяет сжать базу данных в формате Access, используя JRO (Jet Replication Objects). Действие аналогичное пункту меню в Access "Сервис -> Служебные программы -> Сжать и восстановить базу данных".
Параметры:
* DatabaseName - путь к исходной (не сжатой) базе данных
* DestDatabaseName - путь к сжатой базе данных (по умолчанию пустой - в этом случае исходная база заменяется сжатой)
* Password - пароль базы данных (по умолчанию пустой)

PS. этот код был написан в связи с тем что аналогичная процедура через DAO у многих не работала (по пока неизвестным для меня причинам)

Зависимости: windows,SysUtils,ComObj,Dialogs (Dialogs можно исключить используя MessageBox для вывода сообщения исключительной ситуации)
Автор:      savva, savva@nm.ru, ICQ:126578975, Орел
Copyright:  Сапронов Алексей (Savva)
Дата:        9 сентября 2002 г.
**************************************************** }

Procedure CompactDatabase_JRO(DatabaseName:String;DestDatabaseName:String="";Password:String="");
Const
 Provider = "Provider=Microsoft.Jet.OLEDB.4.0;";
Var
 TempName : Array[0..MAX_PATH] of Char; // имя временного файла
 TempPath : String; // путь до него
 Name : String;
 Src,Dest : WideString;
 V : Variant;
begin
 try
     Src := Provider + "Data Source=" + DatabaseName;
     if DestDatabaseName<>"" then
         Name:=DestDatabaseName
     else begin
         // выходная база не указана - используем временный файл
         // получаем путь для временного файла
         TempPath:=ExtractFilePath(DatabaseName);
         if TempPath="" Then TempPath:=GetCurrentDir;
         //получаем имя временного файла
         GetTempFileName(PChar(TempPath),"mdb",0,TempName);
         Name:=StrPas(TempName);
     end;
     DeleteFile(PChar(Name));// этого файла не должно существовать :))
     Dest := Provider + "Data Source=" + Name;
     if Password<>"" then begin
         Src := Src + ";Jet OLEDB:Database Password=" + Password;
         Dest := Dest + ";Jet OLEDB:Database Password=" + Password;
     end;

     V:=CreateOleObject("jro.JetEngine");
     try
         V.CompactDatabase(Src,Dest);// сжимаем
     finally
         V:=0;
     end;
     if DestDatabaseName="" then begin // т.к. выходная база не указана
         DeleteFile(PChar(DatabaseName)); //то удаляем не упакованную базу
         RenameFile(Name,DatabaseName); // и переименовываем упакованную базу
     end;
 except
   // выдаем сообщение об исключительной ситуации
   on E: Exception do ShowMessage(e.message);
 end;
end;


 
sniknik ©   (2005-06-06 17:41) [4]

проще было дать ссылку
http://delphibase.spb.ru/?action=viewfunc&topic=baseaccess&id=10303

> PS. этот код был написан в связи с тем что аналогичная процедура через DAO у многих не работала (по пока неизвестным для меня причинам)
просто dao устарел, уже. я както пробовал вообще сносить его с машины (те. начисто, даже файл dao360.dll затер), аксесс работать не перестал...


 
DSKalugin ©   (2005-06-06 18:48) [5]

>проще было дать ссылку
Меня тоже интересовал этот вопрос, поэтому нашел этот пример быстренько поиском по словам CompactDatabase благодаря твоей наводке :-))
Ну зато другим не надо будет париться искать код.
Так наглядней :-)


 
Vit@ly ©   (2005-06-06 18:59) [6]

Уже было
function CompactAndRepair(DB: string): Boolean; {DB = Path to Access Database}
var  
 v: OLEvariant;
begin
 Result := True;
 try
   v := CreateOLEObject("JRO.JetEngine");
   try
     V.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB,
                       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DB+"x;Jet OLEDB:Engine Type=5");
     DeleteFile(DB);
     RenameFile(DB+"x",DB);
   finally
     V := Unassigned;
   end;
 except
   Result := False;
 end;
end;

Так вроде бы проще


 
Digitman ©   (2005-06-07 08:16) [7]


> sniknik ©   (06.06.05 16:16) [2]


Access Access"у рознь)

скажем, Access97 не знает никаких JRO и работает напрямую именно с DAO

и метод CompactDatabase у DAO.DBEngine тоже имеется



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
14-1119413011
Иксик
2005-06-22 08:03
2005.07.18
Найдите десять отличий :)


3-1117728453
xroot
2005-06-02 20:07
2005.07.18
Непонятная заморо4ка


9-1112986098
Костя
2005-04-08 22:48
2005.07.18
Пожалуста! Я туплю!


14-1118892226
Магнум
2005-06-16 07:23
2005.07.18
Глеб Павловский


14-1119887136
Ega23
2005-06-27 19:45
2005.07.18
Наемники не умирают,