Доступ MS: как уплотнить текущую базу данных в VBA

Можно использовать Хранилище от SourceGear, заменяющий инструмент для безопасного источника Visual Studio. IDE интегрируется в Visual Studio.

инструмент свободен для отдельного пользователя.

[еще 113] информация: http://www.sourcegear.com/vault/index.html

19
задан Nick 22 September 2009 в 13:33
поделиться

7 ответов

Если вы хотите сжать / восстановить внешний файл MDB (не тот, с которым вы сейчас работаете):

Application.compactRepair sourecFile, destinationFile

Если вы хотите сжать базу данных, с которой работаете:

Application.SetOption "Auto compact", True

В этом последнем случае ваше приложение будет сжато при закрытии файла.

Мое мнение: написание нескольких строк кода в дополнительном "compacter" файле MDB, который вы можете вызвать, когда хотите сжать / восстановить файл MDB очень полезно: в большинстве ситуаций файл, который необходимо сжать, больше не может быть открыт в обычном режиме, поэтому вам нужно вызвать метод извне файла.

В противном случае для автокомпакта по умолчанию должно быть установлено значение true в каждом основном модуле приложения Access.

В случае аварии создайте новый файл MDB и импортируйте все объекты из файла с ошибками. Обычно вы обнаружите неисправный объект (форму, модуль и т. Д.), Который не сможете импортировать.

34
ответ дан 30 November 2019 в 03:16
поделиться

Да, это просто.

Sub CompactRepair()
  Dim control As Office.CommandBarControl
  Set control = CommandBars.FindControl( Id:=2071 )
  control.accDoDefaultAction
End Sub

Обычно он просто находит пункт меню «Сжать и восстановить» и программно щелкает по нему.

1
ответ дан 30 November 2019 в 03:16
поделиться

Когда пользователь выходит из FE, попытайтесь переименовать внутренний MDB, желательно с сегодняшней датой в имени в формате гггг-мм-дд. Перед этим убедитесь, что вы закрыли все связанные формы, включая скрытые формы и отчеты. Если вы получили сообщение об ошибке, упс, он занят, так что не беспокойтесь. В случае успеха уплотните его обратно.

См. Мою резервную копию, доверяете ли вы пользователям или системным администраторам? страницу советов для получения дополнительной информации.

1
ответ дан 30 November 2019 в 03:16
поделиться

Я сделал это много лет назад, в 2003 или, возможно, в 97, угу!

Если я помню, вам нужно использовать одну из вышеперечисленных подкоманд, привязанную к таймеру. Вы не можете работать с базой данных с открытыми соединениями или формами.

Итак, вы делаете что-то с закрытием всех форм и запускаете таймер в качестве последнего запущенного метода. (который, в свою очередь, вызовет компактную операцию, когда все закроется)

Если вы этого не поняли, я мог бы покопаться в своих архивах и вытащить его.

0
ответ дан 30 November 2019 в 03:16
поделиться

Ознакомьтесь с этим решением Компактная текущая база данных VBA .

В основном говорится, что это должно работать

Public Sub CompactDB() 
    CommandBars("Menu Bar").Controls("Tools").Controls ("Database utilities"). _
    Controls("Compact and repair database...").accDoDefaultAction 
End Sub 
-1
ответ дан 30 November 2019 в 03:16
поделиться

Также есть надстройка Майкла Каплана SOON («Заткнись, открой новую») . Вам придется связать это, но это один из способов сделать это.

Я не могу сказать, что у меня было много причин, чтобы когда-либо хотеть делать это программно, поскольку я программирую для конечных пользователей, а они никогда не использовать ничего, кроме внешнего интерфейса в пользовательском интерфейсе Access, и нет причин регулярно уплотнять правильно спроектированный интерфейс.

-1
ответ дан 30 November 2019 в 03:16
поделиться

Исходный код DBEngine.CompactDatabase, dest

0
ответ дан 30 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: