ACCESSデーターベースを仕事で運用していると、「このレコードを入力したのはいつ?」、「このレコードを入力したのは誰?」という情報が必要な場面に出くわす時があります。
複数人で同じACCESSファイルを使用している場合、スタート画面にログイン画面を設け、操作したユーザーを特定するような構成にするのがメジャーな方法でしょう。
ここまで作りこまない方法で、レコードを入力・更新したユーザーを記録したいとき、和休が実践している方法がありますのでご紹介します。
まず、テーブルには「finalupdate」(日付型)と「updateuser」(テキスト型)というフィールドを設けます。
「いつ入力や更新されたか」を取得するには、「finalupdate」に入力や更新した時刻をnow関数で取得し、レコードを入力・更新することで実現できます。
ACCESSに用意されている「Environ関数」を利用して自作関数を作り、追加クエリーや更新クエリーでレコードを更新するときに実行させます。
「Environ関数」とは、WINDOWS環境変数を取得する関数で、コンピューター名、WINDOWSにログオンしているユーザー名、WINDOWSのバージョンなどを取得することができます。
updatePC = Environ("computername") End Function
Function updateUSER() As String updateUSER = Environ("username") End Function
追加・更新クエリの式に直接「Environ関数」を使用することもできるのですが、WINDOWSの構成によるものか定かではありませんが、「式に未定義関数’Environ’があります」というエラーメッセージが表示されることがありましたので、自作関数化しました。
使用例です
Let’s use Access VBA 「Lesson8 非連結フォームからレコードを操作する【レコード追加編】」で使用した、レコードを追加するSQLに組み込んでみましょう。
フィールド名 | 属性 | 備考 |
---|---|---|
ID | 長整数型 | 各人ごとに振られたIDを保存します。 |
氏名 | テキスト型 | 漢字氏名を保存します。 |
シメイ | テキスト型 | カナ氏名を保存します。 |
生年月日 | 日付/時刻型 | 生年月日を保存します。 |
finalupdate | 日付/時刻型 | レコードが操作された最後の時間を保存します。 |
updateuser | テキスト型 | レコードを操作したユーザーを保存します。 |
続いて、SQLに今回紹介した関数を加えます。
Private Sub btn_追加_Click() Dim db As DAO.Database Dim strSQL As String Set db = CurrentDb strSQL = "insert into 基本情報 (ID,氏名,シメイ,生年月日,finalupdate,updateuser) " & _ "values(" & Me.txt_ID & ",'" & Me.txt_氏名 & "','" & Me.txt_シメイ & "',#" & Me.txt_生年月日 & "#,#" & Now & "#,'" & updateUSER & "') " db.Execute strSQL End Sub
いかがでしょうか。レコードを追加した時刻と、ユーザーがテーブルに記録されたでしょうか。
では、次に Let’s use Access VBA 「Lesson9 非連結フォームからレコードを操作する【レコード更新編】」で使用した、レコードを更新するSQLに組み込んでみましょう。
Private Sub btn_更新_Click() Dim db As DAO.Database Dim strSQL As String Set db = CurrentDb strSQL = "update 基本情報 set 氏名='" & Me.txt_氏名 & "',シメイ='" & Me.txt_シメイ & "',生年月日=#" & Me.txt_生年月日 & "#,finalupdate=#" & Now & "#,'" & updateUSER & "' " & _ "where ID=" & Me.txt_ID db.Execute strSQL End Sub
レコードを更新した時刻と、ユーザーがテーブルに記録されたでしょうか。
コメントをどうぞ!