Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Access [D7, Access2003]


lamer_y ©   (2006-05-22 01:12:00) 

Подскажите как правильно сжимать Access 2003?


piople   (2006-05-22 06:47:00) [1]


> { **** UBPFD *********** by delphibase.endimus.com ****
> >> Программное сжатие базы данных 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;
Пример использования:

...
db.Close;
CompactDatabase_JRO('c:\database.mdb',
 'c:\Archiv\database_pack.mdb', 'password');
db.open;
...


Наверх

Титульная страница Поиск, карта сайта Написать письмо