MS ACCESS(へたれな)コネタ フォームにバインドしたデータのトランザクション処理

MS-ACCESSにおいて、明細形式の複数行表示されている画面で表示データ全体に対するトランザクション処理を行ないました。以前、MS-ACCESSを利用していたとき、そのような場合には編集用のワークテーブルを用意してコミットする場合に編集内容を転記する仕組で実現していました。しかし、ちょっとしたアプリを作成するのにいちいちワークテーブルを作成するのは面倒です。そこで、トランザクション処理は使えないものかと調べてみました。もちろん、VBAでデータ処理する場合にはトランザクション処理は今までにも行ったことがあります。フォームにデータをバインドしてる状態での実績はありませんでした。
単純に、MS-ACCESSの「Workspaces(0)」でトランザクションOKかと思って次のコードで全然ダメでした。

Private Sub cmdキャンセル_Click() 
    Workspaces(0).Rollback 
    DoCmd.Close acForm, Me.Name 
End Sub 
Private Sub cmd登録_Click() 
    Workspaces(0).CommitTrans 
    DoCmd.Close acForm, Me.Name 
End Sub 
Private Sub Form_Open(Cancel As Integer) 
    Workspaces(0).BeginTrans 
End Sub 

MS-ACCESSのフォームにバインドされたDBとコードで扱うDBは別セッションで管理されているようです。たしかに、SQLServerORACLEのDBをリンクして利用しているときでも、コード上からDBにアクセスしているセッションとMS-ACCESS内でフォームがデータを取り扱っているセッションが異なることはわかっていたのですが、純粋にDAOだけを扱っている場合には同じセッションなのかなと勘違いしていました。やはり、コネクションを同一にするために、フォームのバインドソースをコード上で指定してあげる必要があったのですね。デザイン時データソースにテーブル指定した状態では同一のコネクションが使用されないようです。

Private Sub Form_Open(Cancel As Integer)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT * FROM Customers", dbOpenDynaset)
    Set Me.Recordset = rs
End Sub

ACC2000: Access データベースの bound form トランザクションを制御する方法