2007/09/12
Access 実践入門 第23号
-------------------------------------------
Access 実践入門 第23号 (2007.09.12)
-------------------------------------------
こんにちは、Access実践入門の佐藤です。
やっと朝夕、涼しくなってきました。
よく眠れるようになりますから、疲れもとれるでしょうか。
今月は、運動会や、お祭りやいろんな行事がありますね〜
【目次】
---------------------------------------------------------------------
【1】学年の計算
【2】学年表の表示
【3】次回予告
---------------------------------------------------------------------
【1】学年の計算
---------------------------------------------------------------------
先週の続きです。
住所一覧表の下の「学年表」というボタンのクリック時に
DoCmd.OpenQuery "quto学年削除"
DoCmd.OpenQuery "quto学年追加"
gakunen
DoCmd.OpenForm "fo学年表"
と書いてあります。
上の2行のクエリで、作業テーブル「to学年」の、住所録番号、生年月日日付、
が出来ています。
あとは、学年のフィールドに、学年を計算して入れていけば、できあがりです。
3行目の gakunen は、モジュールの gakunen()をここから実行しています。
その内容を見てみます。
プログラムの流れは、作業テーブルの「to学年」の1レコード目から、
1つずつ読み込みながら、学年を計算して、フィールド「学年」に答えを入れて
レコードを上書きして最後のレコードまでそれを繰り返す作業です。
「」で説明を書き込んでみます。
--------------------------------------------------------
Dim dbs As Database
Dim rsttable As Recordset
「この2つの変数の定義は、お決まりの物です」
Dim nen As Long '今の西暦年
Dim tuki As String '今の月
Dim i As Long '生年月日の西暦年
Dim j As Long '生年月日の月
「この中で使う変数の定義です。」
Set dbs = CurrentDb
Set rsttable = dbs.OpenRecordset("to学年", dbOpenTable)
「ここもお決まりの物です」
「クエリを使う場合は、dbOpenTable が dbOpenDynaset になります」
'レコードが無かった時の処理
If rsttable.RecordCount = 0 Then
Exit Function
End If
「レコードが存在しなかった場合のエラーチェックです」
「この部分がないと、レコードがなかった場合、プログラムが止まります」
nen = Year(Date)
tuki = Month(Date)
「現在の西暦と月を変数に代入します」
rsttable.Index = "PrimaryKey"
rsttable.MoveFirst
「テーブルを開く場合は、どのキーをインデックスにするか指定します」
「クエリの場合はそのクエリで指定しますからこの行は必要ありません」
「先頭のレコードに移動します」
Do Until rsttable.EOF
「最後のレコードに移動するまで、ループします」
rsttable.Edit
「このレコードを編集します、という意味」
If IsNull(rsttable!生年月日日付) Then
rsttable!学年 = "不明"
GoTo FEND
End If
「生年月日が空白のレコードの場合は、不明とします」
i = nen - Year(rsttable!生年月日日付)
j = Month(rsttable!生年月日日付)
「誕生日からの経過年数をiに代入」
「生年月日の月をjに代入」
If j = 1 Or j = 2 Or j = 3 Or Format(rsttable!生年月日日付, "mmdd") = "0401" Then
i = i + 1
End If
「学年は、1、2、3月、4月1日生まれの人は、学年は1つ上になります」
If tuki = 1 Or tuki = 2 Or tuki = 3 Then
「現在が1月〜3月の場合」
Select Case i
Case 0, 1, 2, 3, 4, 5
rsttable!学年 = "年小"
Case 6
rsttable!学年 = "年中"
Case 7
rsttable!学年 = "年長"
Case 8
rsttable!学年 = "小1"
Case 9
rsttable!学年 = "小2"
Case 10
rsttable!学年 = "小3"
Case 11
rsttable!学年 = "小4"
Case 12
rsttable!学年 = "小5"
Case 13
rsttable!学年 = "小6"
Case 14
rsttable!学年 = "中1"
Case 15
rsttable!学年 = "中2"
Case 16
rsttable!学年 = "中3"
Case 17
rsttable!学年 = "高1"
Case 18
rsttable!学年 = "高2"
Case 19
rsttable!学年 = "高3"
Case Else
rsttable!学年 = "大人"
End Select
Else
「現在が1月〜3月でない場合」
Select Case i
Case 0, 1, 2, 3, 4
rsttable!学年 = "年小"
Case 5
rsttable!学年 = "年中"
Case 6
rsttable!学年 = "年長"
Case 7
rsttable!学年 = "小1"
Case 8
rsttable!学年 = "小2"
Case 9
rsttable!学年 = "小3"
Case 10
rsttable!学年 = "小4"
Case 11
rsttable!学年 = "小5"
Case 12
rsttable!学年 = "小6"
Case 13
rsttable!学年 = "中1"
Case 14
rsttable!学年 = "中2"
Case 15
rsttable!学年 = "中3"
Case 16
rsttable!学年 = "高1"
Case 17
rsttable!学年 = "高2"
Case 18
rsttable!学年 = "高3"
Case Else
rsttable!学年 = "大人"
End Select
End If
FEND:
rsttable.Update
「学年を書き込みます」
rsttable.MoveNext
「次のレコードに移動します」
Loop
「ループの開始部分に移動します」
rsttable.Close
「レコードセットを閉じます」
「他にも、学年の計算方法は、いろんな方法があると思います」
「何個かのクエリを使うことでも計算はできると思いますが、モジュールを
使った方が解りやすい場合もありますので、使い方を練習してください」
--------------------------------------------------------
【2】学年表の表示
---------------------------------------------------------------------
学年の計算が終わったら、
DoCmd.OpenForm "fo学年表"
で、フォームが開きます。
このフォームのレコードソースは、「qu学年表」です。
先程作成した「to学年」と、「ta住所録」「ta区分」のテーブルが使われています。
住所一覧表の下の「学年表」というボタンがクリックされるたびに、
作業テーブルの全レコードを削除し、作業データを追加し、学年を計算する
という事を実行します。
学年は、年に一度しか変わりませんが、データは、日々変わるものですから、
その都度すべてを計算する作業は、よくあることです。
【3】次回予告
---------------------------------------------------------------------
次回は、住所録管理のまとめ、です。
=====================================================================
【Access実践入門】
ホームページ : http://www.msactry.com/
メルマガ用サンプルプログラム
: http://www.msactry.com/mag2/001/index.htm
参考書「Access実践入門」のダウンロード(PDFファイル)
: http://www.msactry.com/down00/downrepo.htm
=====================================================================
【発行システム】『まぐまぐ!』 http://www.mag2.com/
配信中止はこちらから http://www.mag2.com/m/0000229312.html
=====================================================================


