NotesデータベースをMicroSoft Accessで作ってみる(年齢計算)
(前回の内容)自分の端末にMicroSoft Accessがインストールされていることを知り、Access VBAに挑戦を決意。自分の分野であるHCL Notesの開発言語もBASIC言語であることから、Notesでモックアップを作成してNotesとAccess VBAを対比させて演習を進めることに。作成するのは社員情報データベース。今回から、Access側の開発に入ります。
今回、挑戦すること
- 生年月日フィールドに日付を入力すると、年齢を自動計算させる。(フィールドのイベントトリガーの確認)
- 生年月日フィールドに入力がない状態で保存するとき、メッセージを表示させる。(フォームのイベントトリガーの確認)
- 自動的に、今日の日付と生年月日を突き合せて年齢の更新を行う。(スケジュールエージェントの確認)
参考文献
生年月日フィールドに日付を入力した後、年齢を自動計算させる。
フィールドのイベントトリガーは、NotesもAccessも大差はない。
Lotus Scriptの場合
Sub Exiting(Source As Field)
'現在の画面を取得
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
'誕生日と今日の日付を取得
Dim birthday As New NotesDateTime(uidoc.FieldGetText("BirthDay"))
Dim nowday As New NotesDateTime( "Today" )
'今日と誕生日の差分を計算
Dim y ,m As Integer
Dim age As Integer
y = Year(nowday.LSLocalTime) - Year(birthday.LSLocalTime)
m = Month(nowday.LSLocalTime) - Month(birthday.LSLocalTime)
If m < 0 Or (m = 0 And Day(nowday.LSLocalTime) < Day(birthday.LSLocalTime)) Then
age = y - 1
Else
age = y
End If
'年齢に計算結果をセット
Call uidoc.FieldSetText ( "age", Cstr( age ) )
End Sub
Access VBAの場合
Private Sub BirthDay_LostFocus()
Dim y, m As Integer
Dim age As Integer
y = Year(Now) - Year(Me.BirthDay)
m = Month(Now) - Month(Me.BirthDay)
If m < 0 Or (m = 0 And Day(Me.BirthDay) < Day(Me.BirthDay)) Then
age = y - 1
Else
age = y
End If
Me.age = CStr(age)
End Sub
Lotus ScriptとAccess VBAを比較すると、自分自身を取得する方法が異なることが分かりました。それから、Lotus Scriptでは日付型にパラメータが必要ですが、Access VBAにはパラメータがありませんでした。
コードの構成はそのまま書けたので、お作法さえ押さえれば苦労はしないかも?
生年月日フィールドに入力がない状態で保存するとき、メッセージを表示させる。
フォームのイベントトリガーも、NotesもAccessも大差はありませんでした。
(フォームのイベントは、NotesもAccessも数が多すぎて1画面に収まらないため、画像は省略)
Lotus Scriptの場合
Sub Querysave(Source As Notesuidocument, Continue As Variant)
If Source.FieldGetText("BirthDay") = "" Then
Msgbox "生年月日の入力がありません", 16, "入力チェック"
Continue =False
End If
End Sub
Access VBAの場合
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.BirthDay)) Or (Me.BirthDay.Value = "") Then
MsgBox "生年月日の入力がありません", 16, "入力チェック"
Cancel = True
End If
End Sub
Acess VBAは、MicrosoftのBeforeUpdate イベントの解説を参考にしました。
ここでも、Meキーワードが使用されています。フロントエンドの処理はLotus Scriptよりも簡潔にコードが書けそうです。また、Me.BirthDay.Value の .value は省略しても問題なく動作しました。Lotus Scriptよりも細かい作法に気を使わなくても動作はするという印象を受けました。(もっとも、その分だけバグを見逃しがちになりそうですが…。)
※「自動的に、今日の日付と生年月日を突き合せて年齢の更新を行う。」は次の記事にまわします。
Author And Source
この問題について(NotesデータベースをMicroSoft Accessで作ってみる(年齢計算)), 我々は、より多くの情報をここで見つけました https://qiita.com/NomuSunder/items/1c5559ccb5320b947a18著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .