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

Программное сжатие базы данных Access используя DAO

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



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

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Процедура позволяет сжать базу данных в формате Access, используя DAO.
Действие аналогичное пункту меню в Access "Сервис -> Служебные программы ->
Сжать и восстановить базу данных".
Параметры:
* DatabaseName - путь к базе данных
* Password - пароль базы данных

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

//перед вызовом процедуры базу надо закрыть, а после - открыть

procedure TData.CompactAccessDatabase(DatabaseName, Password: string);
var
  TempName: array[0..MAX_PATH] of Char; // имя временного файла
  TempPath: string; // путь
  Name: string;
  tmpDAO: _DBEngine;
  ClassID: TGUID;
  V35, V36: string; // версия DAO
begin
  V35 := 'DAO.DBEngine.35';
  V36 := 'DAO.DBEngine.36';
  try // получим ClassID
    try
      ClassID := ProgIDToClassID(v35);
    except
      try
        ClassID := ProgIDToClassID(v36);
      except
        raise; // что то нам неизвестное
      end;
    end;
    // получаем путь для временного файла
    TempPath := ExtractFilePath(DatabaseName);
    if TempPath = '' then
      TempPath := GetCurrentDir;
    //получаем имя временного файла
    GetTempFileName(PChar(TempPath), 'mdb', 0, TempName);
    Name := StrPas(TempName);
    DeleteFile(PChar(Name)); // этого файла не должно существовать :))
    if Password <> '' then
      Password := ';pwd=' + Password;
    tmpDAO := CreateComObject(ClassID) as _DBEngine;
    tmpDAO.CompactDatabase(DatabaseName, Name, 0, 0, Password);
    DeleteFile(PChar(DatabaseName)); // удаляем не упакованную базу
    RenameFile(Name, DatabaseName); // переименовываем упакованную базу
  except
    // выдаем сообщение об исключительной ситуации
    on E: Exception do
      ShowMessage(e.message);
  end;
  еnd;

Пример использования:

...
db.Close;
CompactAccessDatabase('database.mdb', 'password');
db.open;
...

Программный процессор Delphi, использующий DAO (Data Access Objects) для компрессии базы данных Microsoft Access программно. Процедура принимает два параметра: DatabaseName (путь к файлу базы данных) и Password (пароль для базы данных).

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

  1. Процедура начинается с определения переменных:
    • TempName: массив символов для хранения временного имени файла.
    • TempPath: строка для хранения пути к временному файлу.
    • Name: строка для хранения имени временного файла.
    • ClassID: переменная TGUID для хранения классового идентификатора для DAO-инжина.
    • V35 и V36: строки для хранения версий DAO (DAO.DBEngine.35 и DAO.DBEngine.36).
  2. Затем процедура пытается получить ClassID для DAO-инжина с помощью функции ProgIDToClassID. Если это не удается, она пытается снова с другой версией DAO.
  3. Затем процедура получает путь к временному файлу, извлекая его из параметра DatabaseName. Если пути нет, она использует текущий рабочий каталог.
  4. Процедура генерирует временное имя файла с помощью функции GetTempFileName и хранит его в переменной Name.
  5. Затем процедура удаляет любые существующие временные файлы с тем же именем (если они есть).
  6. Если был предоставлен пароль, она конкатенирует пароль с семиколоном (;) для создания новой строки, которая будет использоваться позднее в процедуре.
  7. Процедура создает новый экземпляр DAO-инжина с помощью функции CreateComObject и присваивает его переменной tmpDAO.
  8. Затем она вызывает метод CompactDatabase на объекте tmpDAO, передавая оригинальное имя файла базы данных, временное имя файла и пароль (если он был предоставлен).
  9. После компрессии процедура удаляет оригинальный файл базы данных и переименовывает временный файл для замены им.
  10. Блок обработки исключений ловит любые исключения, которые могут возникнуть во время процесса компрессии, и отображает сообщение об ошибке в окне сообщений.

Наконец, пример использования показывает, как вызывать эту процедуру на открытом объекте базы данных Access (db), после закрытия базы данных и ее последующего открытия снова.

Программное сжатие базы данных Access может быть выполнено с помощью DAO, позволяя уменьшить размер файла и улучшить производительность при работе с базой.


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

Получайте свежие новости и обновления по 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 06:48:49/0.003558874130249/0