MS Access Tips/Sample and VBA and Blog customize etc...

サブフォームの登録できるレコード件数を制限したい

サブフォームに表示されているグループで、登録できるレコード件数を5件に制限したい。

例えば、請求書などの伝票で1枚の行数が固定されていて、行数を超える場合は、新しく伝票を発行するという場合とか、登録できる最大数が決まっている場合に、規定数まで入力したらそれ以上は新規登録はできないようにする方法です。

最大数が5件の場合、4件登録してあり、5件目を入力し保存したら、新規登録行が消えて新規登録できないくなります。また、レコード削除して5件未満になると新規登録行が復活します。というようなインタフェイスを実現します。

難易度:

レコード数が5件(最大件数)になったら、「追加の許可」プロパティを「いいえ」設定すればいいだけです。コードとしては下記の1行のみです。

問題はどのタイミング、イベントでそれをするかということです。

レコード件数が変化するイベント、「挿入後処理」「削除後確認」などに記述すればよさそうですが、メインフォームでレコード移動するとサブフォームの件数も変化するので、メインフォームの「レコード移動時」にも記述する必要が出てきます。それでは、記述する場所が分散してメンテナンス上からもよろしくない感じです。

そこで、サブフォームのレコード移動時に記述することにします。これだと、レコード挿入したときも、レコード削除したときも、メインフォームで移動して表示される件数が変更されたときも発生しますので、記述するのは一ヶ所ですみます。ただ、単にレコード移動しただけでも発生してしまうのがひっかかりますが、記述する場所が一ヶ所で済むというメリットを優先させました。

これで実験してみると、5件で追加不可の状態から、レコード件数0のグループへ移動したり、新規レコードへ移動したとき、「追加の許可」が「はい」になりません。「追加の許可」が「いいえ」でレコード件数が0の場合はレコード移動時のイベントは発生しないのです。

そこでサブフォームのレコード移動時のイベントプロシージャをPublic宣言してメインフォームのレコード移動時に呼び出すことにしました。

サブフォームのレコード移動時

メインフォームのレコード移動時

サンプルMDB が下記からダウンロードできます。
FrmRecordCountLimit_07.zip (Access 2007-2010 形式 - 30kb)
FrmRecordCountLimit.zip (Access 2002-2003 形式 - 30kb)
FrmRecordCountLimit_2k.zip (Access 2000 形式 - 28kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/189-c4b1e8c4
該当の記事は見つかりませんでした。