Базы данных могут быстро увеличиваться в размере по мере использования, что иногда снижает их быстродействие. Они также могут быть повреждены или повреждены. Для предотвращения и устранения этих проблем можно использовать команду «Сжатие и восстановление базы данных». Процесс сжатия не сжимает данные — он уменьшает файл базы данных, убирая неиспользуемое пространство. Команда Сжать и восстановить базу данных также поможет улучшить производительность базы данных.
Совет: разделение базы данных помогает предотвратить повреждения файлов базы данных и ограничить потерю данных за счет хранения данных в отдельном файле, к которой пользователи не имеют прямого доступа.
Что вы хотите сделать?
Способы сжатия и восстановления базы данных
Существует несколько подходов к сжатию и восстановлению базы данных. Часто происходит автоматическое сжатие и восстановление базы данных при ее закрытии. Кроме того, вы можете вручную выполнить команду «Сжатие и восстановление базы данных», если база данных открыта, а база данных не открыта.
Окно сообщения при закрытии базы Access
Подготовка
Перед началом сжатий и восстановления необходимо сделать следующее:
- Резервное копирование базы данных В ходе восстановления Access может удалить некоторые данные из поврежденных таблиц. Иногда эти данные можно восстановить из резервной копии. В дополнение к обычной стратегии резервного копирования следует сделать резервную копию непосредственно перед использованием команды «Сжатие и восстановление базы данных». Дополнительные сведения см. в теме «Защита данных с помощью резервного копирования и восстановления».
- Монопольный доступ к базе данных Для операции сжатия и восстановления базы данных требуется монопольный доступ к файлу базы данных, так как она может привести к отключению других пользователей. Перед выполнением сжатия и восстановления базы данных следует уведомить других пользователей, чтобы они не работали с ней в это время. Дополнительные сведения см. в теме «Открытие существующей базы данных Access». Сообщите пользователям, как долго они не должны работать с базой данных. Если вы регулярно выполняете сжатие и восстановление, отмечайте, как долго выполняется эта операция. Это позволит более точно оценить, как долго пользователи не должны работать с базой данных.
- Получить достаточное разрешение на доступ к базе данных Если у вас нет достаточных разрешений и вам нужно сжатие и восстановление базы данных, обратитесь за помощью к системному администратору. Дополнительные сведения см. в разделе «Изменения общего доступа к файлам по сети в Windows 10».
Автоматическое сжатие и восстановление базы данных при ее закрытии
Чтобы автоматически сжимать и восстанавливать базу данных при ее закрытии, установите флажок Сжимать при закрытии. Этот параметр влияет только на открытую в данный момент базу данных. Заключив этот параметр отдельно для каждой базы данных, которую вы хотите автоматически сжатие и восстановление. В многопользовательских базах данных этот параметр включать не стоит, поскольку из-за него может кратковременно нарушаться доступ к базе данных.
1.3 Убрать все панели Access
- На вкладке Файл выберите пункт Параметры.
- В диалоговом окне «Параметры Access» выберите «Текущая база данных».
- В разделе Параметры приложений установите флажок Сжимать при закрытии.
- Нажмите кнопку ОК.
- Закройте и снова разкройте базу данных, чтобы параметр вступил в силу.
Сжатие и восстановление открытой базы данных вручную
- Выберите «Файл>в >». Access создаст копию сжатой и восстановленной базы данных в одном месте.
Сжатие и восстановление базы данных, которая не открыта, вручную
Используйте эту процедуру, если не можете открыть базу данных Access напрямую.
- Убедитесь, что другие пользователи в данный момент не используют файл базы данных.
- Запустите Access.
- В Access 2013, Access 2016 и Access 2019
- На странице шаблонов дважды щелкните пустую базу данных.
- Выберите «Файл >закрыть».
Access создаст копию сжатой и восстановленной базы данных в одном месте.
Сжатие и восстановление поврежденной базы данных при запросе Access
Если Access запросит сжатие и восстановление базы данных, при попытке открыть поврежденный файл базы данных выберите «Да». Могут произойти два вещи:
- Если Access полностью восстановит поврежденный файл, отобразится сообщение об успешном восстановлении и необходимости проверить содержимое базы данных, чтобы убедиться в правильности данных.
- Если Access успешно работает лишь частично, он отслеживает объекты базы данных, которые не удалось восстановить в системной таблице MSysCompactErrors. Access откроет таблицу MSysCompactErrors в представлении таблицы. Если у вас есть резервная копия, созданная перед повреждением базы данных, можно воспользоваться таблицей MSysCompactErrors для определения объектов, которые необходимо импортировать в восстановленную базу данных. Чтобы отобрать системные таблицы, щелкните правой кнопкой мыши заголовок окна навигации, а затем в диалоговом окне «Параметры переходов» выберите «Показать системные объекты».
Зачем сжатие и восстановление базы данных
Команда Сжать и восстановить базу данных помогает предотвратить и исправить следующие проблемы, которые могут возникнуть с базой данных: увеличение размеров файлов по мере использования и повреждение файлов.
Увеличение размера файлов базы данных по мере использования
По мере добавления и обновления данных, а также изменения их структуры размер файла базы данных увеличивается. Это происходит отчасти из-за добавления новых данных, а отчасти — по другим причинам:
- Access создает временные скрытые объекты для выполнения различных задач. Иногда временные объекты остаются в базе данных, когда они уже не нужны.
- При удалении объекта базы данных занимаемое им место на диске автоматически не освобождается — файл базы данных по-прежнему занимает место на диске даже после удаления.
По мере заполнения файла базы данных остатками временных и удаленных объектов его быстродействие может снизиться. Объекты могут открываться медленнее, а запросы и операции — выполняться дольше обычного.
Повреждение файлов базы данных
При определенных обстоятельствах файл базы данных может быть поврежден. Если файл базы данных совместно работает по сети и несколько пользователей одновременно работают с ним напрямую, существует небольшой риск его повредить. Риск повреждения тем выше, если пользователи часто редактирует данные в полях Memo, а риск растет со временем. Вы можете снизить этот риск с помощью команды «Сжатие и восстановление базы данных».
Зачастую такой тип повреждения возникает из-за проблемы с модулем VBA Visual Basic для приложений и не приводит к потере данных. Однако они могут привести к нарушению структуры базы данных, например потере кода VBA или ошибкам форм.
Иногда повреждение файла базы данных приводит к потере данных. Обычно эта потеря ограничивается потерей последнего действия одного пользователя, то есть единичного изменения данных. Когда пользователь начинает изменять данные и изменение прерывается (например, из-за отказа сетевой службы), Access помечает файл базы данных как поврежденный. Файл можно восстановить, но после восстановления некоторые данные могут отсутствовать.
Источник: support.microsoft.com
Почему при закрытии таблицы программа аксесс
Есть Таблица Table1 с полем Field1.
На основе этой таблицы сделана форма Form1 с текстовым полем Field1 для добавления записей.
Никак не могу сделать кнопку «Отмена» — при закрытии введённое значение всё равно добавляется в таблицу
Я сделал кнопку, по нажатию срабатывает макрос:
Макрокоманда: Закрыть
Тип объекта: Форма
Имя объекта: Form1
Сохранение: Нет
После закрытия формы, то что я ввёл в текстовое поле, добавилось в таблицу
Пробовал и с помощью VB:
DoCmd.Close acForm, «Form1», acSaveNo
Всё равно добавляется.
Объясните, пожалуйста, причину такого поведения.
Re: MS Access: автосохранение при закрытии из формы
От: | Forint |
Дата: | 14.07.04 14:08 |
Оценка: |
Здравствуйте, Anjey_Nimz, Вы писали:
1. В данном случае свойство Сохранить относится к закрываемому объекту (форме), а не к данным которые в нем отображены.
2. В Access есть команда отмены Ctrl-Z. Она отменяет изменения строки таблицы, даже если курсор переведён на другую строку и изменения зафиксированы. Попробуй найти, как её выполнить из программы.
3. Если в форме отображ. только одна запись, можно эдиты не подключать непосредственно к набору данных, а проводить изменения самуму посредством SQL запросов.
Re[2]: MS Access: автосохранение при закрытии из формы
От: | Anjey_Nimz |
Дата: | 14.07.04 21:45 |
Оценка: |
Здравствуйте, Forint, Вы писали:
F>Здравствуйте, Anjey_Nimz, Вы писали:
F>1. В данном случае свойство Сохранить относится к закрываемому объекту (форме), а не к данным которые в нем отображены.
F>2. В Access есть команда отмены Ctrl-Z. Она отменяет изменения строки таблицы, даже если курсор переведён на другую строку и изменения зафиксированы. Попробуй найти, как её выполнить из программы.
Да, только если было произведено несколько изменений (например, последовательных вставок из буфера), то и отмену делать надо несколько раз. Не очень удобно (запасаться каим-то числом).
F>3. Если в форме отображ. только одна запись, можно эдиты не подключать непосредственно к набору данных, а проводить изменения самуму посредством SQL запросов.
Так и делаю. Даже когда много полей
(Честно говоря я был поражён, что в Акцесе нет встроенной функции добавления записей.
SQL-запрос не всегда получается нормаально сделать. Например, мне нужно было ввести в таблицу значение из Edit’а, делённое на 100. Просто так Поле15/100 SQL не понимает. Решил преобразовать в строку, но при этом VB, используя русскую локаль, переводил, например, число 0.12 в строку «0,12», а для SQL надо «0.12». Пришлось делать «невидимое» Поле16, в которое я вставлял Поле15/100, а потом уже в SQL писал просто Поле16. Всё это очень неудобно)
Спасибо большое за ответ
Re[3]: MS Access: автосохранение при закрытии из формы
От: | Bigger |
Дата: | 15.07.04 04:50 |
Оценка: |
Здравствуйте, Anjey_Nimz, Вы писали:
A_N>(Честно говоря я был поражён, что в Акцесе нет встроенной функции добавления записей.
A_N>SQL-запрос не всегда получается нормаально сделать. Например, мне нужно было ввести в таблицу значение из Edit’а, делённое на 100. Просто так Поле15/100 SQL не понимает. Решил преобразовать в строку, но при этом VB, используя русскую локаль, переводил, например, число 0.12 в строку «0,12», а для SQL надо «0.12». Пришлось делать «невидимое» Поле16, в которое я вставлял Поле15/100, а потом уже в SQL писал просто Поле16. Всё это очень неудобно)
А заменить запятую на точку в VBA можно так
НужнаяСтрока = Replace(Исходная строка,»,»,».»)
Программист — это шаман. подарите бубен!
Re[3]: MS Access: автосохранение при закрытии из формы
От: | Forint |
Дата: | 15.07.04 06:02 |
Оценка: |
Здравствуйте, Anjey_Nimz, Вы писали:
A_N>Да, только если было произведено несколько изменений (например, последовательных вставок из буфера), то и отмену делать надо несколько раз. Не очень удобно (запасаться каим-то числом).
Ну нет в Access транзакций. Такие вещи надо продумывать на этапе проектирования.
F>>3. Если в форме отображ. только одна запись, можно эдиты не подключать непосредственно к набору данных, а проводить изменения самуму посредством SQL запросов.
A_N>Так и делаю. Даже когда много полей
A_N>(Честно говоря я был поражён, что в Акцесе нет встроенной функции добавления записей.
Что значит нет. Становишся на последнюю строку таблицы, жмеш стрелку вниз. Наверняка, через VBA такое тоже можно.
A_N>SQL-запрос не всегда получается нормаально сделать. Например, мне нужно было ввести в таблицу значение из Edit’а, делённое на 100. Просто так Поле15/100 SQL не понимает.
И никто не понимает. Поле15.Text — строка и в число надо преобразовывать самому.
Re[4]: MS Access: автосохранение при закрытии из формы
От: | Bigger |
Дата: | 15.07.04 06:32 |
Оценка: |
Здравствуйте, Forint, Вы писали:
F>Ну нет в Access транзакций. Такие вещи надо продумывать на этапе проектирования.
Да в самом нет, а если так через ADO
Программист — это шаман. подарите бубен!
Re[5]: MS Access: автосохранение при закрытии из формы
От: | Forint |
Дата: | 15.07.04 07:28 |
Оценка: |
Здравствуйте, Bigger, Вы писали:
B>Здравствуйте, Forint, Вы писали:
F>>Ну нет в Access транзакций. Такие вещи надо продумывать на этапе проектирования.
B>Да в самом нет, а если так через ADO
ADO само по себе представляет лиш универсальный интерфейс к различным БД, т.е. если СУБД реализует возможность транзакций (SqlServer, Oracle и т.п.) то код будет вполне работоспособен. С Access такой номер не пройдёт. Код выполнятся скорее всего будет, но откатить танзакцию не получится.
Re[6]: MS Access: автосохранение при закрытии из формы
От: | Bigger |
Дата: | 15.07.04 08:18 |
Оценка: |
Здравствуйте, Forint, Вы писали:
skip
F>ADO само по себе представляет лиш универсальный интерфейс к различным БД, т.е. если СУБД реализует возможность транзакций (SqlServer, Oracle и т.п.) то код будет вполне работоспособен. С Access такой номер не пройдёт. Код выполнятся скорее всего будет, но откатить танзакцию не получится.
Неправда Ваша сударь,
Вот этот код прекрасно работает и откатывает, и накатывает.
Просто весь механизм транзакции здесь целиком и полностью перекладываеться на ADO и нам абсолютно всё равно каким СУБД мы пользуемся
Private Sub Кнопка6_Click() Dim pConn As ADODB.Connection sConnectionString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source c:db1.mdb» ;Persist Security Info=False» Set pConn = New ADODB.Connection pConn.ConnectionString = sConnectionString pConn.Open pConn.BeginTrans pConn.Execute » Update [goods] SET price = price + 21″ pConn.RollbackTrans pConn.BeginTrans pConn.Execute » Update [goods] SET price = price + 2″ pConn.CommitTrans pConn.Close Set pConn = Nothing Form_Goods.Refresh End Sub
Попробуйте код, Вам понравиться.
Так, что с Access этот номер прекрасно проходит.
Программист — это шаман. подарите бубен!
Re[4]: MS Access: автосохранение при закрытии из формы
От: | Anjey_Nimz |
Дата: | 15.07.04 08:23 |
Оценка: |
Здравствуйте, Forint, Вы писали:
A_N>>Да, только если было произведено несколько изменений (например, последовательных вставок из буфера), то и отмену делать надо несколько раз. Не очень удобно (запасаться каим-то числом).
F>Ну нет в Access транзакций. Такие вещи надо продумывать на этапе проектирования.
А при чём тут транзакции Я гворил о нескольких измененниях в текстовых полях, а не в таблцие.
Просто хотелось, чтобы при закрытии формы SQL-запрос не исполнялся (если юзер, например, передумал по каким-то причинам вносить дополнительную запись, а поля уже в большинстве заполнены — не стирать же ему всё вручную).
F>>>3. Если в форме отображ. только одна запись, можно эдиты не подключать непосредственно к набору данных, а проводить изменения самуму посредством SQL запросов.
F>Что значит нет. Становишся на последнюю строку таблицы, жмеш стрелку вниз. Наверняка, через VBA такое тоже можно.
Честно говоря, я не нашёл, как такое с помощью VBA сделать (кроме как через RunSql)
A_N>>SQL-запрос не всегда получается нормаально сделать. Например, мне нужно было ввести в таблицу значение из Edit’а, делённое на 100. Просто так Поле15/100 SQL не понимает.
F>И никто не понимает. Поле15.Text — строка и в число надо преобразовывать самому.
Дык я сам то преобразую (точнее VB преобразует )
Dim value1 As Double value1 = Поле15/100
Но потом это число в SQL не засунуть — надо сначала в строку преобразовать, а в настройках локали стоит разделитель запятая. Поэтому, если эго приплюсовать к SQL, то получится как будто это 2 отдельных параметра ( 0 и 12), а не число (0,12).
Но тут уже подсказали
B> НужнаяСтрока = Replace(Исходная строка,»,»,».»)
Re[7]: MS Access: автосохранение при закрытии из формы
От: | Forint |
Дата: | 15.07.04 09:40 |
Оценка: |
Источник: www.rsdn.org
ПОЧЕМУ ПРИ ЗАКРЫТИИ ТАБЛИЦЫ ПРОГРАММА ACCESS НЕ ПРЕДЛАГАЕТ ВЫПОЛНИТЬ СОХРАНЕНИЕ ВНЕСЕННЫХ ДАННЫХ
Почему при закрытии таблицы программа Access не предлагает выполнить сохранение внесенных данных необходимо рассматривать с позиции установленных настроек программы. Возможно, в текущей конфигурации Access сохранение данных после каждого изменения автоматически включено, и поэтому при закрытии таблицы нет необходимости повторно сохранять внесенные данные. Если пользователь хочет получить предложение о сохранении, то можно изменить настройки программы в соответствии с нуждами и требованиями.
Решение проблем совместимости Microsoft Access 2019 и Visual Studio 2022.
Ошибка Папка уже используется: Операция не может быть завершена.
Для обеспечения целостности данных необходимо наличие связанной записи Access
скрыть извещение системы безопасности Microsoft Access
Как связать таблицы в базе данных Microsoft Access 2016
Visual Studio + Access. Выполнение SQL-запросов INSERT INTO, DELETE, UPDATE. Работа с базой данных
Как подтвердить изменения перед сохранением в Microsoft Access (VBA)
Не удается создать отношение с обеспечением целостности данных Access
Как ПРАВИЛЬНО применить сортировку и фильтр в БД Microsoft Access
Источник: uznatpochemu.ru