Pisząc aplikację w programie Access lub w dowolnym innym programie, który przechowuje dane w plikach accdb czasami zachodzi potrzeba kompaktowania bazy danych.
Czym jest owe kompaktowanie? W skrócie można ten proces porównać do defragmentacji dysku twardego. Otóż jeśli zapiszesz w bazie jakiś rekord zawierający sporo informacji (np. jakiś długi string) to po usunięciu owego rekordu nie jest on fizycznie kasowany z pliku a jedynie jest oznaczony jako usunięty. Gdy często do bazy dodajemy jakieś wpisy, które później usuwamy to rozmiar takiego pliku bazy danych może rosnąć. W skrajnym przypadku może się okazać, że po zaimportowaniu kilkuset MB danych i ich usunięciu plik accdb ma kilkaset MB objętości. Dlatego jeśli Twoja aplikacja często usuwa dane z takiego pliku warto jest dodać jakąś procedurę kompaktowania. Dzięki temu plik będzie zajmował mniej miejsca na dysku jak również może to wpłynąć na przyśpieszenie działania aplikacji.
Kompaktowanie „samego siebie”.
Jeśli napisałeś aplikację w programie Access to warto jest „skompaktować” samego siebie. Niestety, ale nie znalazłem jakiegoś prostego kawałka kodu w VBA dla programu Access, który pozwoliłby na skompaktowanie pliku accdb, który jest właśnie uruchomiony. Natomiast jeśli Twoja aplikacja korzysta z mechanizmu własnej wstążki to do definicji wstążki możesz dodać systemowy przycisk kompaktujący bazę danych. W tym celu do kodu wstążki należy dodać taki oto kod XML:
<button idMso="FileCompactAndRepairDatabase" label="Kompaktuj bazę" size="large" supertip="Jeśli usunąłeś dużo starych rekordów z bazy to warto jest 'zdefragmentować' bazę danych"/>
Kompaktowanie zewnętrznych plików
Natomiast istnieje fajny sposób na kompaktowanie plików accdb, które nie są uruchomione. Np. napisałeś makro w Excelu, które łączy się z danym plikiem accdb. Mało tego jeśli masz bazę danych w programie Access rozdzieliłeś aplikację na dwa pliku (backend i frontend) to z frontedu możesz kompaktować plik z backendu.
W tym celu wystarczy wywołać plik msaccess.exe z dwoma parametrami: ścieżka do pliku accdb oraz parametr /compact. Oto przykładowe wywołanie:
"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" "C:\baza\baza_wb.accdb" /compact
Jak pobrać ścieżkę do programu msaccess.exe opisałem w notce Jak sprawdzić gdzie jest zainstalowany Access (lub Outlook). Natomiast proces kompaktowania (w zależności od rozmiaru bazy danych i wydajności komputera) może chwilę potrwać. Dlatego do uruchomienia programu msaccess.exe nie korzystaj z instrukcji Shell, gdyż następna po nim instrukcja MsgBox wyświetlająca komunikat o zakończeniu kompaktowania bazy danych wykona się zanim baza zostanie skompaktowana. Rzuć okiem na notkę: Jak wstrzymać wykonywanie skryptu zanim uruchomiony program się nie zakończy?