複数の列に関係する入力規則の設定

 フィールド(列)に記録する値を制限したいという場合がありますが、例えば50以下だとか2015/12/31以前でなければならないという場合、そのフィールドの入力規則に式を入力すれば簡単に設定できます。しかし、同じレコードの他のフィールドに記録されている値より小さくなければならないなど、他のフィールドとの比較が必要な場合はフィールドではなくテーブルのプロパティで設定する必要があります。

 例として右のようなテーブルを用います。このテーブルにおいて、発送日は受注日以降、そして納品日は発送日以降の日付となるよう入力規則を設定するものとします。


 試しに「受注日」列の入力規則プロパティに「<=[発送日]」と入力してみます。


 しかし、このプロパティでは他の列の値を利用することができないためエラーとなります。


 そこでデザインビューに戻り、適当なところで右クリックするなどしてテーブルのプロパティを表示し、そこで表れる入力規則プロパティに次のように入力します。

   [受注日]<=[発送日] And [受注日]<=[納品日] And [発送日]<=[納品日]

条件が1つ余分な気もしますが、「[受注日]<=[納品日]」を省略すると、受注日と納品日にだけ値が入力された場合(発送日がNullのまま)に制約が機能しないのでこうしています。


 発送日を受注日より前の日付としてみたところエラーとなりました。制約がきちんと機能していることがわかります。


 さて、気になるのは他のテーブルのフィールドとの比較が可能かどうかですが、定義域集合関数(DLookupなど)やサブクエリが使えないため入力規則では実現できません。