MS ACCESS(へたれな)コネタ クエリとVBA間のDRY
ACCESSにおいて、クエリ内で使用する抽出条件と入力チェックなどVBAにて使用する条件記述はどうしてもDRY原則を守ることが難しくなります。たとえば、下記のようなテーブルが存在します。
このデータから「おじさん」を抽出するロジックを、仮に「おじさん」を「埼玉県に住む40歳以上に人」と定義します。通常はクエリにて下記のように表現します。
ここで、このテーブルにデータ投入する際に、入力チェックで「おじさん」である場合には警告を出すとします。ここで入力チェックVBAではクエリで表現したのと同じようなロジックを作成する必要があります。
そこで、「おじさん」を検出するロジックを、下記のようにパブリックの関数化しておきます。
Public Function Isおじさん(p出身地 As String, p生年月日 As Date) As Boolean Isおじさん = False If p出身地 = "埼玉県" Then If Int((Format(Date, "yyyymmdd") - Format(p生年月日, "yyyymmdd")) / 10000) >= 40 Then Isおじさん = True End If End If End Function
このロジックは、もちろん入力チェックに使用できるとともに、クエリ内でも同じ関数を使用することができます。
よって、「おじさん」の定義が変更されても、この関数内を変更するだけで対応することができDRYを満足することになります。しかし、このやり方はあまり業務では使用されません。それは、パフォーマンスの低下が著しいということです。それじゃ、役に立たない無駄知識でね。でも、この考え方は重要であると思っています。