Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Сжать и сохранить базу 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
14-1119529290
X9
2005-06-23 16:21
2005.07.18
Схема советских колонок S90


9-1111853342
parovoZZ
2005-03-26 19:09
2005.07.18
Поменять изображение на поверхности


4-1116867164
MrAndrey_ka
2005-05-23 20:52
2005.07.18
Перехват WM_PAINT


1-1119801165
Euro
2005-06-26 19:52
2005.07.18
Modal Form


14-1119873163
_Anton
2005-06-27 15:52
2005.07.18
Динамичаски добавить поле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский