既定値により自動で連番をふる

 既定値プロパティを使ってフォーム上で連番を自動的に採番する方法についてです。
 新たなレコードに付与される連番は、それまでの連番の最大値に1を加えたものとします。

※以下の設定は単票フォームで機能します。帳票フォームでは正しく機能しませんのでご注意ください。


f:id:accs2014:20161127210102p:plain:right:w400

 例として右のようなテーブルをレコードソースとします。
 自動的に採番しようとするフィールドは「会員番号」です。


f:id:accs2014:20161127210458p:plain:right:w500

 フォームに会員番号のテキストボックスを置き、「既定値」プロパティを次のように設定します。


Nz(DMax("会員番号","会員テーブル"),0)+1

 DMax関数により、それまでの会員番号の最大値を求め、それに1を足しています。
 Nz関数を用いているのは、レコードがない状態だとDMax関数の戻り値及び既定値全体の値がNullとなってしまうためです。これによりレコードがない状態でも1から採番されます。


f:id:accs2014:20161127210100p:plain:right:w300

 フォームビューでの新規レコードの様子です。
 上記テーブルでの会員番号の最大値は6でしたので、新たに7という番号が付与されています。このレコードに入力してさらに新規レコードに進むと、適宜8,9…と採番されていきます。

※繰り返しになりますが、帳票フォームでは採番が重複してしまうなどの不具合が生じ、意図通りに機能しません。帳票フォームの場合はVBAにより適当なタイミングで値を付与するなどの対応が必要です。