フォーム:帳票フォームの更新を一括保存・破棄する方法 Hit Counter

対象バージョン : 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の指定が可能。
 

補 足


目次へ戻る