Главная страница
    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.031 c
14-1091638104
sasha_n
2004-08-04 20:48
2004.08.22
Структура файла SecEvent.Evt


3-1090749396
a3a3ello
2004-07-25 13:56
2004.08.22
InterBase -> Firebird


14-1091451567
Иксик
2004-08-02 16:59
2004.08.22
Образование на Украине для Иностранца.


3-1091096694
avs
2004-07-29 14:24
2004.08.22
Fastreport - программно изменить ориентацию страницы.


1-1091211709
Влад
2004-07-30 22:21
2004.08.22
Процедурный тип в TP7





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