Microsoft Access 掲示板

マスタテーブルの値を更新するようなVBA / 5

7 コメント
views
4 フォロー
5

まず、蛇足から、

 ・顧客情報履歴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
通報 ...