フォーム:帳票フォームの更新を一括保存・破棄する方法 |
対象バージョン : 2000, 2002, 2003
最終更新日 : 2016/09/18 (オリジナル作成日:2002/04/13)
概 要
帳票フォームで更新をしたデータを、指定したタイミングでテーブルへ一括保存、あるいは帳票フォームの更新を破棄する方法です。
解 説
フォームのプロパティに Recordset があり、これに対してトランザクション化した表示対象の Recordset オブジェクトを与えます。
保存する場合は CommitTrans により、破棄する場合は RollbackTrans(Rollback) によりトランザクションを終了させます。
フォームヘッダー等の上に保存する場合のコマンドボタン cmd_Commit と、破棄する場合のコマンドボタン cmd_Rollback の二つがあるものとします。
● ADP(ADO) の場合
'フォームモジュールレベル変数の定義 Option Compare Database Option Explicit Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset 'コマンドボタン cmd_Commit のクリック時のイベントプロシージャ Private Sub cmd_Commit_Click() cnn.CommitTrans MsgBox "更新を保存しました。" DoCmd.Close acForm, Me.Name End Sub 'コマンドボタン cmd_Rollback のクリック時のイベントプロシージャ Private Sub cmd_Rollback_Click() cnn.RollbackTrans MsgBox "更新を破棄しました。" DoCmd.Close acForm, Me.Name End Sub 'フォームの開く時のイベントプロシージャ Private Sub Form_Open(Cancel As Integer) Set cnn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブル名", cnn, adOpenDynamic, adLockPessimistic ' ※1 Set Me.Recordset = rs cnn.BeginTrans End Sub
● MDB(DAO) の場合
'フォームモジュールレベル変数の定義 Option Compare Database Option Explicit Dim db As DAO.Database Dim rs As DAO.Recordset 'コマンドボタン cmd_Commit のクリック時のイベントプロシージャ Private Sub cmd_Commit_Click() DAO.CommitTrans MsgBox "更新を保存しました。" DoCmd.Close acForm, Me.Name End Sub 'コマンドボタン cmd_Rollback のクリック時のイベントプロシージャ Private Sub cmd_Rollback_Click() DAO.Rollback MsgBox "更新を破棄しました。" DoCmd.Close acForm, Me.Name End Sub
'フォームの開く時のイベントプロシージャ Private Sub Form_Load() Set Me.Recordset = Nothing Set db = CurrentDb Set rs = db.OpenRecordset("テーブル名", dbOpenDynaset) ' ※1 Set Me.Recordset = rs DAO.BeginTrans End Sub ※1 テーブル名の他、クエリー(更新可能なビュー)、SQLの指定が可能。
補 足