Microsoft Access Club >初心者講座 >休暇申請管理ソフト >このページ >次頁 - 前項  サイト内検索


社員別休暇申請閲覧フォームの作成_3:休暇申請管理ソフト



このフォームも今回が最後です。もうちょっと付き合って下さいね。下記の赤丸についてお話する予定です。

 

これら2個のリストボックスは、"受身"です。No.19でお話したリストボックスは、利用者にIDを選択させる"行動者"でしたね。このようにリストボックスの性格を大別すると2種類あるのが判ります。そうしたら、これら2個のリストボックスはどのようにして動くのか?という疑問が湧いてきます。なんせ"受身"なんですから‥。

答えは、「再クエリ」と「抽出条件」の2つだけです。単純な仕組みです。リストボックス A は、有休取得状況一覧を表示するリストボックスです。

 

 

「値集合ソース」に配置しているクエリ(クエリ名 qry_prilist_1)は上記のとおりです。いつものようにSpace関数を利用して左詰めを多少修正していますが‥。抽出条件の欄に下記の3条件を指定しています。

 

@社員IDリストボックス

A年度選択コンボボックス

B有給休暇に限定する"有休"

 

これらを再クエリをもって、最新の値に結び付けます。よくリストボックス間の連動を行うという話が出てくると思いますが、このようにするのが基本です。

 

また、フィールド名「年度」はFunction関数です。これは、会社によって有休を取得した際の 年度 が異なりますので、各月を何年度に該当するのかを、この関数を利用して判断させています。この関数についての詳細は、No.11の「初心者講座_休暇申請ソフト_11」の最後に説明していますのでご覧ください。

 

次に、リストボックス B は、有休以外の休暇取得状況一覧を表示するリストボックスです。

「値集合ソース」に配置しているクエリ(クエリ名 qry_prilist_2)は、リストボックスAと殆ど同じ構造です。違うのは、抽出条件の "有休" を <>"有休"(有休以外)としているところだけです。

 

フォームの下部に、休暇種別の取得日数等を表示させています。

これには、Dcount関数を利用して種別にデータを抽出している訳ですが、テーブルから直接行うのではなくクエリを作成しそのクエリからデータを引っ張ってきています。元になるクエリは下記のとおりです。

 

 

一例として、有給休暇を挙げますと、テキストボックスの「コントロールソース」欄に下記のように記述します。

 

=IIf(DCount("No.","qry_prilist_3","[職員ID]=[職員ナンバー]and [適用]='有休'")=0,"",DCount("No.","qry_prilist_3","[職員ID]=[職員ナンバー]and [適用]='有休'"))

 

職員ナンバーと休暇種別を抽出条件として、クエリqry_prilist_3にある No. の個数を算出します。ここでは、IIF関数を利用して No. の個数が0であれば、何も表示させないように しています。(""を指定しています。)

最後になりましたが、このフォームの「開く時」イベントに下記プロシージャを記述しています。

 

Private Sub Form_Open(Cancel As Integer)

    Me![ラベル].Caption = DLookup("[休暇種別_1]", "[tbl_kankyo]", "[ID]=1") & "休暇取得日数"
    Me![ラベル2].Caption = DLookup("[休暇種別_2]", "[tbl_kankyo]", "[ID]=1") & "休暇取得日数"
    Me![ラベル3].Caption = DLookup("[休暇種別_3]", "[tbl_kankyo]", "[ID]=1") & "休暇取得日数"
    Me![ラベル4].Caption = DLookup("[休暇種別_4]", "[tbl_kankyo]", "[ID]=1") & "休暇取得日数"

End Sub

 

これは、tbl_kankyoテーブルに格納されている「休暇種別_1」〜「休暇種別_4」に設定している項目をラベルに表示させるものです。

 

何とか無事にこのフォームも済みました。
 


社員別休暇申請閲覧フォームの作成_3:休暇申請管理ソフト


 

-Microsoft Access Club-