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

Вниз

Как программно сжать БД MS Access?   Найти похожие ветки 

 
46_55_41_44 ©   (2004-08-02 09:59) [0]

Как программно сжать базу данных?
Ну всмысле compact...
Подчеркиваю ПРОГРАММНО! :)


 
AndB ©   (2004-08-02 11:00) [1]

var je  : Variant;
   Dest,Src : WideString;
....
try
  Screen.Cursor := crHourGlass;
  Src := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + curBase;
  Dest:= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExtractFilePath(curBase) + "\_pack$.mdb";
 try
   je := CreateOleObject("JRO.JetEngine");
 except
   MessageBox(Application.Handle, PChar("Не могу создать объект JetEngine"), PChar("Ошибка"),MB_ICONINFORMATION);
   exit;
 end;
  ads.Close; conn.Connected := False; // текущее подключение
  je.CompactDatabase(src, dest);
  DeleteFile(curBase);
  RenameFile(ExtractFilePath(curBase) + "\_pack$.mdb", curBase);
  conn.Connected := True; ads.Open;  // открыли обратно
finally
  screen.Cursor := crDefault;
end;

_________________________
без претензии на совершенство, но работает.


 
Zlod3y ©   (2004-08-02 11:02) [2]

procedure CompactDatabase_DAO(DatabaseName,Password:String);
var
 TempName: array[0..MAX_PATH] of char;
 TempPath: string;
 Name: string;
 tmpDAO: _DBEngine;
 ClassID: TGUID;
 V35, V36: string;
begin
 V35:="DAO.DBEngine.35";
 V36:="DAO.DBEngine.36";
 try
   try
     ClassID := ProgIDToClassID(v35);
   except
     try
       ClassID := ProgIDToClassID(v36);
     except
       raise;
     end;
   end;
   TempPath:=ExtractFilePath(DatabaseName);
   if TempPath="" then TempPath:=GetCurrentDir;
   GetTempFileName(PChar(TempPath),"mdb",0,TempName);
   Name:=StrPas(TempName);
   DeleteFile(PChar(Name));
   if Password <> "" then Password:=";pwd="+Password;
   tmpDAO := CreateComObject(ClassID) as _DBEngine;
   tmpDAO.CompactDatabase(DatabaseName,Name,0,0,Password);
   DeleteFile(PChar(DatabaseName));
   RenameFile(Name,DatabaseName);
 except
   on E: Exception do ShowMessage(e.message);
 end;
end;


или

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;


ещё не забудь добавить в uses DAO2000 или ComObj


 
46_55_41_44 ©   (2004-08-02 12:11) [3]

Ну народ спасибо...
Большое спасибо.. Помогло..
А можно ли таким же макаром создать БД?


 
AndB ©   (2004-08-02 12:19) [4]

"Можно" (с) Anatoly Podgoretsky


 
46_55_41_44 ©   (2004-08-02 12:20) [5]

Как????


 
46_55_41_44 ©   (2004-08-02 12:21) [6]


> AndB ©   (02.08.04 12:19) [4]
> "Можно" (с) Anatoly Podgoretsky

Как это сделать???



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

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

Наверх




Память: 0.47 MB
Время: 0.036 c
14-1091769275
ИМХО
2004-08-06 09:14
2004.08.22
Гугл


11-1079715719
nester
2004-03-19 20:01
2004.08.22
Как убрать заголовки страниц в TabControl?


6-1086611446
TSa
2004-06-07 16:30
2004.08.22
Узнать логин с которым входили в систему ?


1-1092138101
daiv
2004-08-10 15:41
2004.08.22
Добрый день. Есть список файлов


14-1091532907
ИМХО
2004-08-03 15:35
2004.08.22
Delphi + Lamer = ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский