Accessの魂をデータベースに刻む。`CreateProperty`でメタデータを掌握する極意
こんにちは。現場で長くAccessと対峙していると、「このデータベース、一体いつ誰が作ったんだっけ?」とか「バージョン管理をテーブル外でスマートにやりたい」という悩みにぶつかりますよね。
テーブルに「設定値」という名前のテーブルを作って管理するのも一つの手ですが、もっと「Accessの内部」に深く寄り添う方法があります。それが`DAO.Database.CreateProperty`を使った「カスタムデータベースプロパティ」です。
今日は、Accessの奥深くに情報を隠し持つ、ちょっと玄人好みのテクニックを伝授しましょう。ここをクリアすれば、あなたはもう「マクロの記録」を卒業し、Accessの構造を支配するエンジニアの入り口に立っていますよ。
—
なぜ「データベースプロパティ」なのか?
通常のテーブルやクエリとは異なり、データベースプロパティは「ファイルそのもの」に付随する設定値です。
- メリット: テーブルを誤って削除しても設定は消えません。外部からは見えにくいため、不用意な変更を防げます。
- 用途: アプリケーションのビルド番号、最後にパッチを当てた日付、開発者の連絡先など、「システムそのものの素性」を記録するのに最適です。
—
魔法のコード:プロパティの書き込みと読み込み
では、早速コードを見ていきましょう。この操作には`DAO`(Data Access Objects)という、Access VBAの心臓部のようなライブラリを使います。
1. プロパティを保存する(CreateProperty)
存在しないプロパティを作成する場合、`CreateProperty`で定義し、それを`Properties`コレクションに追加するという手順を踏みます。
Public Sub SetAppVersion(strVersion As String)
Dim db As DAO.Database
Dim prp As DAO.Property
Set db = CurrentDb
On Error Resume Next ‘ プロパティが既に存在する場合の対策
db.Properties(“AppVersion”) = strVersion
‘ プロパティが存在しない場合はエラーになるので作成する
If Err.Number <> 0 Then
‘ dbTextは文字列型。型指定を間違えるとエラーになるので注意!
Set prp = db.CreateProperty(“AppVersion”, dbText, strVersion)
db.Properties.Append prp
Err.Clear
End If
On Error GoTo 0
MsgBox “バージョン情報を更新しました: ” & strVersion
End Sub
2. プロパティを読み込む
保存した値を取り出すのは、もっと簡単です。
Public Function GetAppVersion() As String
Dim db As DAO.Database
Set db = CurrentDb
‘ エラーハンドリングで未定義時の対策をするのがプロの流儀
On Error Resume Next
GetAppVersion = db.Properties(“AppVersion”)
If Err.Number <> 0 Then
GetAppVersion = “未設定”
End If
On Error GoTo 0
End Function
—
現場で必ず陥る「落とし穴」と対策
ここからは、伝説のエンジニアとして皆さんに伝えておきたい「ハマりポイント」です。
1. 型(Type)を間違えてはいけない
`CreateProperty`の第二引数にはデータ型を指定します。
- `dbText`: 文字列
- `dbLong`: 長整数
- `dbBoolean`: 真偽値
ここを適当に書くと、プロパティは作れても「値の代入」の段階で型不一致エラーが出ます。必ず保存したいデータの型に合わせましょう。
2. コレクションへの追加を忘れない
初心者がよくやるミスは、`CreateProperty`で作っただけで満足してしまうことです。「作る(Create)」ことと「追加する(Append)」ことは別物です。appendしなければ、それはメモリ上に浮いているだけの幽霊です。必ず`db.Properties.Append prp`を呼び出してください。
3. CurrentDbのライフサイクルを意識する
`CurrentDb`は呼び出すたびに新しいオブジェクトを生成します。頻繁に使う場合は、一度変数にセットして使い回すのがパフォーマンス向上のコツです。今回のコードではシンプルにするために毎回生成していますが、大規模な処理の中では意識してみてください。
—
最後に:Accessを「育てる」ということ
データベースプロパティを活用することは、ただの自己満足ではありません。開発者として、「このファイルがどういう状態で、どこへ向かっているのか」をコード自身に語らせる行為です。
「プログラムは書いた時点が始まり」です。あなたが埋め込んだバージョン情報や更新日は、数年後のあなた自身や、あなたの後に引き継ぐ誰かを救う羅針盤になります。
さあ、あなたのAccessファイルを、単なるデータ置き場から「意思を持ったシステム」へと進化させてみませんか?ここをクリアしたあなたなら、きっともっと面白い開発ができるはずです。応援していますよ!
