Как Access Базу Данных Оптимизировать И Исправить Ошибки Программно.

  • Автор темы Автор темы Sascha
  • Дата начала Дата начала

Sascha

Команда форума
Администратор
Ofline
Access базу данных можно оптимизировать и исправить ошибки программно.
Код:
uses ComObj;


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;



procedure TForm1.DBOptimizer1Click(Sender: TObject);
Var
  path, db, db1: string;
begin
  GetDir(0, path);
  db := path + '\db.mdb'; {имя таблицы и путь к ней}
  With DM do
  begin
    ADOconnection1.Close;
  end;
  CompactDatabase_JRO(db, '', 'Пароль если есть');
  With DM do
  begin
    ADOconnection1.Open;
    ADOQuery1.Open;
  end;
end;
 
Назад
Сверху Снизу