Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
14-1124362119
kyn66
2005-08-18 14:48
2005.09.11
Программа для защиты CD от копирования и виртуализации


1-1124711920
ASoft
2005-08-22 15:58
2005.09.11
Как объединить вертикальные ячейки в Excel (разумеется из Delphi)


1-1124560588
SpyBoy
2005-08-20 21:56
2005.09.11
Listbox_&amp;_ProgressBar


3-1122557914
Gavrila
2005-07-28 17:38
2005.09.11
Как создать DBF для 1С ?


3-1122532989
Alexey Yershov
2005-07-28 10:43
2005.09.11
Отображение картинки из BLOB поля