Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

Как сжать базу ????   Найти похожие ветки 

 
Polyak   (2005-07-27 10:58) [0]

Имеется база Access и я пишу СУБД по технологии ADO. В Access есть в меню, сервис->служебные программы->сжать и восстановить базу даных, пунктик который сжимает базу. Как я понимаю это просто удаление записей помеченных как удаленные. Как это можно сделать с помощью компонентов Дельфи ил как нибудь еще в программе????


 
sniknik ©   (2005-07-27 12:44) [1]

> Как я понимаю это просто удаление записей помеченных как удаленные.
немного не так, это скорее полное копироване данных в новую базу, с естественно убиранием пропусков на "страницах" данных/индексов.
операция довольно сомнительная по полезности (для непорушенной базы), т.к. сразу после нее будет притормаживание за счет доведения базы до "рабочих обьемов" ;). а "лишнее" место все одно используется повторно.

сделай поиск в яндексе Jro CompactDatabase, давалось это много раз, наверняка найдеш. (у себя на машине сложнее найти ;)


 
msguns ©   (2005-07-27 15:37) [2]

>sniknik ©   (27.07.05 12:44) [1]
>операция довольно сомнительная по полезности (для непорушенной базы), т.к. сразу после нее будет притормаживание за счет доведения базы до "рабочих обьемов" ;). а "лишнее" место все одно используется повторно.

Прямо так категорично ?
У меня несколько клиентов с аксешной БД. Если ее не сжимать хотя бы раз в 2 недели, к концу месяца наступают безбожные тормоза: база вылазит за 1,5 Гб. В сжатом виде больше 400 Мб я ее не видел. После сжатия база "летает" несколько дней.


 
TQuery   (2005-07-27 15:57) [3]

Солидарен с msguns ©   (27.07.05 15:37) [2]


 
sniknik ©   (2005-07-27 16:50) [4]

msguns ©   (27.07.05 15:37) [2]
базы аксесса до 2000го формата признано глючные. у тебя не оно (меньше)? + версия jet, доступ?
безбожных тормозов точно быть не должно, у меня не было, хотя уже давно всем не рекомендуем часто делать "архивацию". были бы, кнонибудь бы обязательно уже бы возмутился.


 
DSKalugin ©   (2005-07-27 18:01) [5]

Программное сжатие базы данных 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;


 
Polyak   (2005-07-28 04:22) [6]

DSKalugin - БОЛЬШОЕ СПАСИБО !!!!!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
3-1122924727
CCCP
2005-08-01 23:32
2005.09.11
Помогите с запросом


1-1124527379
Kirill
2005-08-20 12:42
2005.09.11
Загрузить ресурс из моего приложения


1-1124289353
GanibalLector
2005-08-17 18:35
2005.09.11
Ini.SectionExists


9-1116409473
Buzzz
2005-05-18 13:44
2005.09.11
Земля в ГЛС


9-1115981864
Ландграф Павел
2005-05-13 14:57
2005.09.11
Ищу девочек и мальчиков для рисования вставок на flash`е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский