【入門編】DAO.Database.CreatePropertyを用いた、カスタムデータベースプロパティの保存と取得 – Access VBA解析バイブル

スポンサーリンク

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ファイルを、単なるデータ置き場から「意思を持ったシステム」へと進化させてみませんか?ここをクリアしたあなたなら、きっともっと面白い開発ができるはずです。応援していますよ!

タイトルとURLをコピーしました