На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > как программно можно сжать базу Access97/Jet?
      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;

      не помню где эту процедурку взял - так что без копирайта


      Добавлено в
      а ну да, сам вызов примерно такой:
      CompactDatabase_JRO('C:\MyDataBase\base.mdb','','123');


      Автор: ZEE


      Ещё вариант: Пакет компонентов kaDAO - там эта функция встроена

      Автор: Vit
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0145 ]   [ 16 queries used ]   [ Generated: 19.03.24, 05:56 GMT ]