Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

База растет как на дрожах! [D6, Access]


O l e g ©   (2004-09-06 04:03:00) 

Когда зайдешь в акцес и нажмешь сжать и восстановить уменьшается в три раза! Можно это делать программно из дельфи?
Я уже начинаю жалеть, что связался с MS Access! Help :-?


Soft   (2004-09-07 22:32:00) [1]

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;


O l e g   (2004-09-07 01:58:00) [2]

Менять придется долго! Не хочется как-то!


sniknik   (2004-09-06 08:46:00) [3]

> Я уже начинаю жалеть, что связался с MS Access!
меняй на другую но там будет та же фигня (если у базы страничная организация). там весь смысл добавлять пространство страницами (даже если нехватает места записать 1 запись в 1 байт) чтобы после писать по готовому. за счет этого достигается большая скорость записи (не надо изменять размер файла на каждый твой чих (добавление позиции)).


YurikGL   (2004-09-06 07:21:00) [4]

Посмотри http://delphi.about.com/library/weekly/aa091801a.htm

Яндекс рулит


Наверх

Титульная страница Поиск, карта сайта Написать письмо