Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Базы данных , Access



Автор: Savva
WEB-сайт: http://delphibase.endimus.com

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

Привет! Я переведу текст на русский язык.

Это процедура Delphi, которая использует объекты репликации Jet (JRO) для сжатия базы данных Access. Процедура принимает три параметра:

  • DatabaseName: путь к файлу исходной базы данных
  • DestDatabaseName: путь к файлу сжатой базы данных, или пустая строка, если оригинальная база должна быть перезаписана
  • Password: пароль для базы данных, или пустая строка, если пароля нет

Вот разбивка кода:

  1. Процедура определяет несколько констант и переменных:
    • Provider: провайдер OLE DB для Microsoft Jet 4.0
    • TempName и TempPath: временное имя файла и путь
    • Name: имя файла сжатой базы данных
    • Src и Dest: WideString переменные для соединений источника и назначения
    • V: переменная Variant для хранения объекта JetEngine JRO
  2. Процедура пытается подключиться к исходной базе данных с помощью провайдера OLE DB:
    • Она создает строку соединения с использованием константы Provider и параметра Data Source, установленного в значение DatabaseName
    • Если DestDatabaseName не пустая, она устанавливает переменную Name в имя файла назначения
  3. Процедура компактифицирует базу данных с помощью объекта JetEngine JRO:
    • Она создает новый экземпляр объекта JetEngine, используя функцию CreateOleObject
    • Она вызывает метод CompactDatabase на объекте JetEngine, передавая строки соединения источника и назначения в параметрах
  4. Если DestDatabaseName пустая, она удаляет оригинальный файл базы данных и переименовывает файл сжатия в оригинальное имя:
    • Она использует функцию DeleteFile для удаления оригинального файла базы данных
    • Она использует функцию RenameFile для переименования файла сжатия в оригинальное имя
  5. Процедура ловит любые исключения, которые могут возникнуть при выполнении и отображает сообщение об ошибке с помощью функции ShowMessage

Пример использования кода на конце показывает, как вызывать эту процедуру, закрывая соединение базы данных перед компактификацией и открывая его после:

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

Обратите внимание, что этот код требует Delphi 6 или более поздней версии для компиляции, так как он использует.unit ComObj. Также помните, что эта процедура сжимает файл базы данных в месте, поэтому убедитесь, что сделали резервную копию оригинальных файлов базы данных перед запуском этого кода!

Программное сжатие базы данных Access может быть выполнено с помощью JRO (Jet Replication Objects) путем вызова процедуры CompactDatabase_JRO, которая позволяет сжать базу в формате Access и заменить исходную не сжатую на упакованную.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Access ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 05:10:03/0.003680944442749/0