【Accessの闇を解く】「名前の自動修正」をVBAで手懐ける!データベース肥大化を防ぐ上級テクニック
こんにちは。現場で泥臭いトラブルを解決し続け、Accessの深淵まで見てきたエンジニアです。
今日は、Access開発者が必ずと言っていいほど直面する「見えない敵」についてお話しします。それは、「名前の自動修正(Name AutoCorrect)」という機能です。
「便利そうだし、オンのままでいいでしょ?」と思っていませんか?
その油断が、数年後にデータベースを「起動するだけで重い」という死の淵へ追い込むことになります。今日はこの機能をVBAでスマートに制御し、プロの現場で生き残るための「リスク回避術」を伝授しましょう。
—
1. なぜ「名前の自動修正」は悪魔の機能なのか?
Accessには、クエリ名やフィールド名を変更した際に、それを使っているフォームやレポートの参照先を自動で書き換えてくれる「名前の自動修正」という機能があります。
一見、至れり尽くせりですが、裏では「名前の自動修正情報」というログをシステムテーブルに溜め込み続けています。 これが肥大化の元凶です。
- パフォーマンスの低下: 起動やクエリ実行のたびに巨大なログを読み込みます。
- データベースの破損リスク: ログが肥大化しすぎて、mdb/accdbファイルそのものが壊れる原因になります。
- 意図せぬ連鎖: 開発者が意図しない箇所で参照が書き換わり、デバッグを困難にします。
プロの現場では、「基本はオフ。必要な時だけ手動で制御する」のが鉄則です。
—
2. VBAで「名前の自動修正」を無効化する魔法のコード
Accessのオプション設定は、`Application.GetOption`(取得)と `Application.SetOption`(設定)というメソッドで操作できます。
以下のコードは、処理の開始時にこの機能をオフにし、終了時に元に戻すという「行儀の良い」テンプレートです。
Public Sub ToggleNameAutoCorrect(ByVal blnEnable As Boolean)
‘ ———————————————————
‘ 目的:名前の自動修正機能の有効/無効を切り替える
‘ 引数:True = 有効化, False = 無効化
‘ ———————————————————
On Error GoTo Err_Handler
‘ “名前の自動修正を実行する” オプション定数
Const OPT_NAME_AUTOCORRECT As String = “名前の自動修正を実行する”
‘ 現在の状態を退避し、新しい設定を適用
‘ ※Application.SetOptionは設定を即座に書き換えます
Application.SetOption OPT_NAME_AUTOCORRECT, blnEnable
Debug.Print “名前の自動修正機能を ” & IIf(blnEnable, “有効”, “無効”) & ” にしました。”
Exit Sub
Err_Handler:
MsgBox “設定変更中にエラーが発生しました: ” & Err.Description, vbCritical
End Sub
—
3. 実践:大量データ更新時の「保護モード」
例えば、大量のレコードを更新したり、クエリを一括実行するようなプロシージャを書く際は、以下のように挟み込みます。
Public Sub UpdateMassiveData()
‘ 1. 安全のために「名前の自動修正」をオフにする
Call ToggleNameAutoCorrect(False)
On Error GoTo Cleanup
‘ — ここに重い処理を記述 —
‘ CurrentDb.Execute “UPDATE …”
‘ ————————–
MsgBox “更新完了!”
Cleanup:
‘ 2. 処理が終わったら必ず元の状態(基本はオフだが、環境による)に戻す
‘ もし常にオフにしておきたいなら、ここは固定でFalseでも良い
Call ToggleNameAutoCorrect(False)
End Sub
—
4. ここをクリアすれば一人前!注意点とリスク回避
この手法を使う上で、初心者が陥りやすい罠を2つだけ伝授します。
① 「名前の自動修正」をオフにしても、過去のログは消えない
実は、`SetOption`でオフにしても、これまでに溜まったログは削除されません。
ログを完全に消すには、オプションをオフにした上で、データベースの「最適化」を手動(またはVBAの `DBEngine.CompactDatabase`)で行う必要があります。
② 他のユーザーへの影響
`SetOption`はAccessアプリケーション全体の設定を書き換えます。マルチユーザー環境(共有フォルダやフロントエンド・バックエンド構成)の場合、自分の操作が他のユーザーの環境設定にも影響を与える可能性があります。
開発環境や、単独で使うフロントエンドツールであれば問題ありませんが、共有環境では「自分のセッションだけで完結させる」工夫が必要になることを覚えておいてください。
—
まとめ:Accessを「育てる」技術
Accessは、ただ画面を作って終わりというツールではありません。
「データベースの健康状態をどう維持し、長く使い続けられるように設計するか」。ここを考えられるエンジニアが、真のAccessマスターです。
「名前の自動修正」を制御できるようになれば、あなたはもう初心者ではありません。次はぜひ、`CurrentDb`を使ったDAOによるクエリ最適化の世界へ足を踏み入れてみてください。
あなたのAccessライフが、軽快でストレスのないものになることを心から願っています。何か行き詰まったら、いつでも戻ってきてくださいね。応援しています!
