Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
ADO [17]
ASCII и CSV [12]
Access [20]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [0]
ODBC [10]
Oracle [0]
Paradox [0]
SQL [29]
Sybase [1]
База данных [0]
Закладки [2]
Записи [0]
Индексы [10]
Компоненты и Базы данных [0]
Модуль данных [3]
Отчеты [2]
Ошибки БД [17]
Поиск [16]
Поля [0]
Сортировка и Фильтр [6]
Таблицы [0]

Наш опрос
Оцените мой сайт
Всего ответов: 30

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Базы данных » Access

Программное сжатие базы данных Access используя JRO (Jet Replication Objects)
{ **** 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;
...
Категория: Access | Добавил: Skinner (03.07.2008)
Просмотров: 462 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2024 Хостинг от uCoz