Программное сжатие базы данных Access используя JRO (Jet Replication Objects)Delphi , Базы данных , Access
Автор: Savva { **** 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. Процедура принимает три параметра:
Вот разбивка кода:
Пример использования кода на конце показывает, как вызывать эту процедуру, закрывая соединение базы данных перед компактификацией и открывая его после:
Обратите внимание, что этот код требует Delphi 6 или более поздней версии для компиляции, так как он использует.unit ComObj. Также помните, что эта процедура сжимает файл базы данных в месте, поэтому убедитесь, что сделали резервную копию оригинальных файлов базы данных перед запуском этого кода! Программное сжатие базы данных Access может быть выполнено с помощью JRO (Jet Replication Objects) путем вызова процедуры CompactDatabase_JRO, которая позволяет сжать базу в формате Access и заменить исходную не сжатую на упакованную. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |