Можно использовать Хранилище от SourceGear, заменяющий инструмент для безопасного источника Visual Studio. IDE интегрируется в Visual Studio.
инструмент свободен для отдельного пользователя.
[еще 113] информация: http://www.sourcegear.com/vault/index.html
Если вы хотите сжать / восстановить внешний файл MDB (не тот, с которым вы сейчас работаете):
Application.compactRepair sourecFile, destinationFile
Если вы хотите сжать базу данных, с которой работаете:
Application.SetOption "Auto compact", True
В этом последнем случае ваше приложение будет сжато при закрытии файла.
Мое мнение: написание нескольких строк кода в дополнительном "compacter" файле MDB, который вы можете вызвать, когда хотите сжать / восстановить файл MDB очень полезно: в большинстве ситуаций файл, который необходимо сжать, больше не может быть открыт в обычном режиме, поэтому вам нужно вызвать метод извне файла.
В противном случае для автокомпакта по умолчанию должно быть установлено значение true в каждом основном модуле приложения Access.
В случае аварии создайте новый файл MDB и импортируйте все объекты из файла с ошибками. Обычно вы обнаружите неисправный объект (форму, модуль и т. Д.), Который не сможете импортировать.
Да, это просто.
Sub CompactRepair()
Dim control As Office.CommandBarControl
Set control = CommandBars.FindControl( Id:=2071 )
control.accDoDefaultAction
End Sub
Обычно он просто находит пункт меню «Сжать и восстановить» и программно щелкает по нему.
Когда пользователь выходит из FE, попытайтесь переименовать внутренний MDB, желательно с сегодняшней датой в имени в формате гггг-мм-дд. Перед этим убедитесь, что вы закрыли все связанные формы, включая скрытые формы и отчеты. Если вы получили сообщение об ошибке, упс, он занят, так что не беспокойтесь. В случае успеха уплотните его обратно.
См. Мою резервную копию, доверяете ли вы пользователям или системным администраторам? страницу советов для получения дополнительной информации.
Я сделал это много лет назад, в 2003 или, возможно, в 97, угу!
Если я помню, вам нужно использовать одну из вышеперечисленных подкоманд, привязанную к таймеру. Вы не можете работать с базой данных с открытыми соединениями или формами.
Итак, вы делаете что-то с закрытием всех форм и запускаете таймер в качестве последнего запущенного метода. (который, в свою очередь, вызовет компактную операцию, когда все закроется)
Если вы этого не поняли, я мог бы покопаться в своих архивах и вытащить его.
Ознакомьтесь с этим решением Компактная текущая база данных VBA .
В основном говорится, что это должно работать
Public Sub CompactDB()
CommandBars("Menu Bar").Controls("Tools").Controls ("Database utilities"). _
Controls("Compact and repair database...").accDoDefaultAction
End Sub
Также есть надстройка Майкла Каплана SOON («Заткнись, открой новую») . Вам придется связать это, но это один из способов сделать это.
Я не могу сказать, что у меня было много причин, чтобы когда-либо хотеть делать это программно, поскольку я программирую для конечных пользователей, а они никогда не использовать ничего, кроме внешнего интерфейса в пользовательском интерфейсе Access, и нет причин регулярно уплотнять правильно спроектированный интерфейс.