フィールドプロパティのうち、値の制約に関わるものとして重要な入力規則について説明します。
入力規則の役割
データ型や定型入力の設定によって、入力される値について制限を設けることができますが、それらは文字種や字数に対するいわば外形的な制約です。一方で、入力規則では、Like演算子による文字列の比較や関数を用いることによって詳細で論理的な制約を加えることができます。例として、あ行で始まる文字列や特定の曜日の日付のみ入力させるといったことが可能となります。
多様で柔軟な設定が可能となっていることから、データ型による制約以上の制約を行いたい場合はまず入力規則の利用を検討するのが適当といえます。
各データ型との対応
入力規則はすべてのデータ型に存在するわけではありません。対応については次のようになっています。
短い テキスト | 長い テキスト | 数値型 | 日付 /時刻型 | 通貨型 | オート ナンバー型 | OLE オブジェ クト型 | ハイパー リンク | 添付 ファイル | 集計 | |
---|---|---|---|---|---|---|---|---|---|---|
入力規則 | ○ | ○ | ○ | ○ | ○ | − | − | ○ | − | − |
設定方法と設定例
比較演算子等の利用
例として右のようなテーブルを用います。
数値型の列「定価」の入力規則に「>=200」と入力してみます。200以上の数値でなければならないという意味です。
200未満の値を入力しようとすると、当然ですがエラーとなります。
次は、同じく「定価」列の入力規則に「[定価] Mod 30=0」と入力してみます。定価を30で割った余りが0であること、つまり定価が30の倍数でなければならないことを意味しています。
この条件に合わない数値(この例では220)を入力しようとすると、やはりエラーとなります。
次の例として、「定価」列の入力規則に今度は「Is Not Null」と入力してみます。
値を入力しないままレコードの記録を終えようとするとエラーとなります。フィールドプロパティ「値要求」を「はい」にしても同じような結果となりそちらの方が早いですが、こうした指定の仕方も可能です。
関数の利用
入力規則においては関数を利用することも可能です。基本的な演算子だけではとても表現できないようなさまざまな制約を設けることが可能となります。
さて、「発売日」列の入力規則に「Weekday([発売日])<>1」と記入してみます。
Weekday関数の戻り値1は日曜であることを意味します。つまりこの列に記録される日付は日曜日以外でなければならないという意味になります。
日曜日である日付(例として2015/8/23)を記録しようとするとエラーとなります。
次の例として、「発売日」列の入力規則に「<=Date()」と記入してみます。つまり今日(システムの日付)以前の日付でなければならいという意味です。
システムの日付(この例では平成28年4月)より後の日付を記録しようとするとエラーとなります。
Like演算子によるマッチング
使用するテーブルは上記と同じですが、今度は「商品名」列の入力規則に「Like "[あ-お]*"」と入力してみます。
「[あ-お]」という部分は「あ」から「お」までのいずれか1文字という意味であり、また「*」は任意の文字列(省略可)を表しています。つまりひらがなのあ行で始まる値であれば何でもよく、それ以外の値は入力させないという意味になります。
データシートビューです。「あおい」「うぐいす」といった値は許容されていますが、一文字目があ行でない文字列(例として「かきつばた」)を入力しようとするとエラーとなります。
Like演算子に使える文字とその意味は次のようになっています。
文字 | 意味 |
---|---|
* | 任意の文字列(省略可) |
? | 任意の1文字(省略不可) |
# | 任意の数字1文字(省略不可) |
[] | (見づらいかもしれませんが角カッコです)ハイフンとともに、入力を許容する文字の範囲を表します。例えば「[あ-お]」は、「あ」から「お」のひらがな1文字を表します。 |
! | []やハイフンとともに、入力を許容しない文字列の範囲を表す場合に用います。 例えば「[あ-お]*」は、あ行で始まる文字列を表しますが、「[!あ-お]*」は、あ行以外で始まる文字列を表します。 |
他の列との比較
さて、値を制約するにしても具体的にいくらからいくらまでがOKというのではなく、他の列の値と比較してより大きな値でなければならない、といった制約を設けたい場合があります。
例えば、右のようなテーブルにおいて、発送日の日付は受注日以降でなければならない、としたい場合、発送日のフィールドプロパティに「[受注日]<[発送日]」と設定することが考えられますが、実はこれだとエラーとなってしまいます。入力規則では他の列の値を利用することはできないからです。
ではそのような制約は実現できないのかというと、フィールドプロパティの入力規則ではなくテーブルプロパティの入力規則を用いて、そちらに「[受注日]<[発送日]」と設定すればうまくいきます。
大変紛らわしいので注意が必要です。