hatena
hatena
2021/06/17 (木) 14:54:07
まず、蛇足から、
・顧客情報履歴CD 主キー 数値型 サイズ:バイト型,式=Nz(DMax("[顧客情報履歴CD]","顧客情報履歴")+1,1)
上記の主キーですか、バイト型だと255件しか登録できないので、整数型が長整数型にしておいた方かいいでしょう。長整数型をお勧めします。
本題
入力フォームで、入力するするときにVBAで更新することになりますが、現状の入力フォーム設計が不明なので、下記のような設計だと仮定します。
顧客情報履歴 に過去の顧客情報もすべて保存していくということなので、基本的に下記のような処理の流れになると思います。(一例ですが)
顧客情報閲覧フォームで顧客情報(最新のデータ)を表示
もし、データに変更がある場合は、
顧客情報更新フォームを新規レコードで開き(「データ入力」プロパティを「はい」に設定)、
顧客情報閲覧フォームのデータを転記する。
顧客情報更新フォームの更新前処理で、顧客マスター の 顧客情報履歴CD、登録日 を更新する。
顧客情報更新フォームの更新前処理は下記のような感じでいいでしょう。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Me.NewRecord Then Exit Sub
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset( _
"SELECT * FROM 顧客マスター WHERE 顧客コード =" & Me.顧客コード, dbOpenDynaset)
rs.Edit
rs!顧客情報履歴CD = Me.顧客情報履歴CD
rs!登録日 = Date
rs.Update
rs.Close
End Sub
上記はDAOレコードセットを開いて、Edit、 Updateメソッドで更新してますが、
更新クエリで更新する方法もあります。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Me.NewRecord Then Exit Sub
Dim stSQL As String
'更新クエリのSQL生成
stSQL = "UPDATE 顧客マスター SET " & _
" 顧客情報履歴CD= " & Me.顧客情報履歴CD & _
",登録日= " & Date & _
" WHERE 顧客コード =" & Me.顧客コード
CurrentDb.Execute stSQL '更新クエリ実行
End Sub
通報 ...