Access実践入門 TOPへ
 ■ マイクロソフトアクセス、日記のデータ
1ヶ月分のデータを作る

日記を書く書かないにかかわらず、1ヶ月単位でデータを作ってしまいます。それで、書きたい日付のデータを選んで日記を編集してもらいます、この方が処理が簡単です。

日記のデータは、「ta日記」です。


フィールド「本文」はメモ型にしています。テキスト型では255文字までしか処理できないので、メモ型です。

最初の画面の下に、「月データ作成」ボタンがあります。
このボタンクリックで、「fo月data作成」が開きます。


[指定年月]に定型入力で、○○年○○月と入力されます。
隠れた非連結のコントロール[年月]に年月を6桁の文字でコピーしておきます
Me![年月] = Format([Forms]![fo月data作成指定]![指定年月], "yyyymm")
この[年月]で日記の月単位の管理をします。

「作成」ボタンで、次のプロシージャが実行されます

----------------------------------------------------------
Dim dbs As Database
Dim rst_1 As Recordset

Dim i As Integer
Dim d As String

Set dbs = CurrentDb
Set rst_1 = dbs.OpenRecordset("ta日記", dbOpenDynaset)

For i = 1 To 31
rst_1.AddNew
d = Format([Forms]![fo月data作成指定]![指定年月], "yyyy""/""mm""/""") & Right("0" & Right(Str(i), Len(Str(i)) - 1), 2)
If IsDate(d) = 0 Then
Exit For
End If
rst_1!日記日付 = DateValue(d)
rst_1!年月 = Format(d, "yyyymm")
rst_1.Update
Next i

rst_1.Close

MsgBox ("データを作成しました")
DoCmd.Close
----------------------------------------------------------

For Next のループで1〜31までをループします(最大31日まであるから)
dの文字列変数に、指定2006年2月だった場合、2006/02/01から2006/02/31の文字が代入されていきます。2006/02/29になった時に、IsDate(日付に変換できるかどうか調べる関数)でゼロを返します。その時点でループを抜けます。

Right("0" & Right(Str(i), Len(Str(i)) - 1)
この部分は、たとえば、1の時には01の文字列をプラスするのですが、数字を文字列に変換すると左に半角スペースが入るので、それを削除する処理も同時にします。

これで、1ヶ月分のデータができあがります。

月データの移動

最初の画面の左上に、月移動のメニュー部分があります


「前月」のボタンがクリックされたら、次のプロシージャが実行されます
----------------------------------------------------------
Me![年月表示] = Format(DateAdd("m", -1, DateValue(Me![年月表示])), "yyyy""年""mm""月")
Me![年月] = Format(Me![年月表示], "yyyymm")

If DCount("*", "ta日記", "[年月] ='" & Me![年月] & "'") = 0 Then
MsgBox "この年月のデータはありません..."
Me![年月表示] = Format(DateAdd("m", 1, DateValue(Me![年月表示])), "yyyy""年""mm""月")
Me![年月] = Format(Me![年月表示], "yyyymm")
DoCmd.GoToControl "検索"
Exit Sub
Else
Forms![fo日記一覧].RecordSource = "qu日記一覧月移動"
End If

----------------------------------------------------------
DateAddは、指定した期間後の日付を返す関数です。
ここでは、”m”と−1に組み合わせで、1ヶ月前の日付を返します
[年月表示]に”2006年01月”が表示されます
隠しコントロールの[年月]に”200601”が代入されます。

次に、データ「ta日記」にフィールド「年月」に”200601”のレコードがいくつあるか調べます。
DCount("*", "ta日記", "[年月] ='" & Me![年月] & "'")
ゼロの場合は、まだその月のデータが無いので移動出来ません。
[年月表示]と[年月]を元に戻して、中止させます。
レコードがある場合には、一覧表のレコードソースを変えます。
「qu日記一覧月移動」は次のようになっています。


隠しコントロールの[年月]を抽出条件にしています。
”200601”だけの一覧表になります。

「翌月」のボタンは、−1が1に、1が−1になっているだけです。

「年月指定」のボタンは、指定画面が表示されて、同じような処理をしています、確認してみてください。