なぜAccessの「最適化」を自動化すべきなのか
こんにちは。現場で動くVBAを愛する講師です。Accessを使い込んでいると、レコードの追加や削除を繰り返すたびに、ファイルサイズがどんどん膨れ上がっていく現象に悩まされたことはありませんか? これはAccess特有の「ゴミ」がファイル内に蓄積されるためです。
通常は「データベースの最適化」を手動で行うのが一般的ですが、忙しい現場では「つい忘れてしまう」のが人間です。そこで今回は、Accessを閉じる際に、VBAを使って自動的に最適化を実行する仕組みを解説します。
「閉じる時に最適化」の設定を確認する
まず、VBAを書く前に、Accessの標準機能を確認しましょう。
[ファイル]タブの[オプション]から[現在のデータベース]を開き、「閉じる時に最適化」にチェックを入れる方法が最も簡単です。しかし、大規模なデータや共有環境では、この設定が裏で動くことでフリーズを招くこともあります。
そこで、「特定の条件の時だけ」「ユーザーに確認してから」実行するVBAをご紹介します。
VBAで実装する:AutoExecとQuitの工夫
VBAで実装する場合、フォームの「閉じるとき」イベントを利用します。以下のコードを、メインメニューとなるフォームのイベントに記述してください。
実装コード例
Private Sub Form_Unload(Cancel As Integer)
Dim msg As String
msg = “データベースを最適化して終了しますか?”
If MsgBox(msg, vbYesNo + vbQuestion, “最適化の確認”) = vbYes Then
‘ 現在のDBの設定を変更して最適化を予約する
Application.SetOption “Auto Compact”, True
Else
Application.SetOption “Auto Compact”, False
End If
End Sub
プロの現場で気をつけるべき「注意点」
この手法を実務で導入する際、絶対に忘れてはならないのが「排他制御」です。
複数人が同時に利用している共有ネットワーク上のデータベースでは、誰か一人が接続している状態で最適化を実行しようとすると、エラーが発生したり、最悪の場合ファイルが破損したりするリスクがあります。
私が現場で推奨しているのは、「管理者専用のメンテ用フォーム」を用意し、そこに「最適化ボタン」を設置することです。
1. 排他モードでファイルを開いていることを確認する。
2. Application.CompactRepair メソッドを使用して、バックグラウンドではなく、明示的に最適化処理を走らせる。
このように、単に「閉じるたびに」自動化するのではなく、「ファイルサイズが一定を超えた時」や「管理者がログアウトする時」に限定して最適化を行う設計にすることが、システムを長持ちさせる秘訣です。
効率化は大切ですが、安全性が伴わなければ本末転倒です。「自動化」と「制御」のバランスを意識して、快適なAccess環境を構築してくださいね。
