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

Вниз

Как программно сжать БД 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1090842348
-=VaaL=-
2004-07-26 15:45
2004.08.22
Access и прога на CD


14-1091780934
Игорь Шевченко
2004-08-06 12:28
2004.08.22
Вдогонку к рекламе пива и морали. Спам пришел.


14-1091102799
ИМХО
2004-07-29 16:06
2004.08.22
500-я ошибка


3-1090902152
Jiny
2004-07-27 08:22
2004.08.22
Как перерисовать значение по формуле из табл. в DBgrid ?


1-1091646763
Black-Grin
2004-08-04 23:12
2004.08.22
Combobox - редактирование