2012/08/01

【Access】自作自演で課題をやってみる

何のことやら分からん題名になってしまったけど、以前の反省を踏まえ、後輩に出題する課題をとりあえず自分でやってみておこうということです。

では今回の課題はこちら。


ストーリー
あなたの勤める会社(従業員数200名)では毎週5名ずつ掃除当番を選出することになっている。現在は総務のAさんが社員名簿とにらめっこして極力連続して当たったりしないように苦心して選出しているが、いい加減面倒くさくなりAccessを勉強中のあなたに「何とかして!!」と泣きついてきた。

条件
  • 毎週、社員名簿から5名を選出する。1度選出されたら全社員が1巡するまで再度選出されることはない。また、再度選出される際でも前回の選出から最低3ヶ月は間をおかなければならない。
  • 毎月、月初めにその月の掃除当番表を作成し、出力する。


以上。さて、早速ですがこの話題のキーワードをまとめておきましょう。「ランダムな選出」「期間込みのフラグ」「月区切りのレポート」といったところでしょうか。軽く順番に考えてみます。

「ランダムな選出」
社員テーブル(仮)を作成し、そこからランダムに5名選出する。まぁ、ループとクエリかSQL文を組み合わせれば済みそうな気がします。

「期間込みのフラグ」
選出時に2つ条件があります。「1巡するまで再選出されないこと」と「再選出は前回の選出から3ヶ月以上経過していること」です。これを実現しようと思った場合、社員テーブル(仮)に日付を持ったフィールドを作ってやるのが無難かぁと思いました。もしくは別のフラグ管理用テーブルを作るかってとこかなぁ。

「月区切りのレポート」
最終的にこれが結果として出力されるものですね。まぁ月を指定するパラメータを持ったクエリでレポート作成するのが無難そうです。週の区切りはレポートのグルーピング機能で出来ないかしら?って感じです。ちなみに選出の実行はこれが出力されるタイミングでやっちゃえば良いでしょう(選出タイミングは条件にないので)。

自分的に何となく出来そうな気がしてきたのでテーブルを設計してみます。とりあえず、テーブルは社員テーブル1個で済ます方向でいこうと思います。社員テーブルのフィールドは以下の通り。


テーブル
論理名社員テーブル
物理名Employees
フィールド
論理名物理名
IDIdlong(increment)
社員番号EmployeeNostring
社員氏名EmployeeNamestring
選出日ChoseDatedate


選出日は日付/時刻型でしちゃってます。文字列型にすべきかとも思いましたがそんなに日付比較に精度を求める必要もないのでこのままでいきます。SQLServerのように単独で日付型、時間型を持っていればそちらを使いたいとこなんですが…。

長くなっちゃったので今回はここまで。次回はさくっとクエリかSQL文とVBAを書いちゃいます。


pagetop