• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

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

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,368
Баллы
155
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;
 
Вверх Снизу