Accessでのトランザクション(SQL SERVERとの連携)

Access SQl serverの連携で、Formのアクティブ時に、5つもの長い更新クエリ的なファンクションを実行させるイベント処理があるのだけれども、同一フォームを複数の人が参照し、わずかでも編集を加えた場合、「データが変更されています」というエラーが出てプログラムが止まる。また、ランタイム環境では、エラーメッセージを出すと同時に、システムがシャットダウンされてしまう。
こうした状況を打開するために、アクティブ時イベントで続く5つのファンクションの始まりから終わりまでを、トランザクション処理で囲み、エラーが出た場合の制御も加えてみた。途中にMe.Requery 等の動作が入っているが、この制御を加えたことにより、複数のPCから同時編集しても、エラーでダウンすることがなくなった。
厳密には問題も含んでいるかもしれないが、とりあえずこれで様子をみてみようと思う。

Private Sub Form_Activate()
Dim WSP As Workspace
Set WSP = DBEngine.Workspaces(0)

Me.Recalc

On Error GoTo trans_Err
‘トランザクション処理開始
WSP.BeginTrans
KasoBuhin_Up ‘ → 自作ファンクション1
BanBuhin_Up → 自作ファンクション2
Kobuhin_Up → 自作ファンクション3
Kosu_Cal → 自作ファンクション4

Me.F部品明細サブ.Requery
Me.F子部品明細サブ.Requery
Me.Requery

BanTanka_Copy → 自作ファンクション5

‘トランザクション処理終了
WSP.CommitTrans ‘————-③

Me.Refresh

trans_Exit:
WSP.Close
Set dbs = Nothing
Set WSP = Nothing
Exit Sub

trans_Err:
‘Roll back the transaction
WSP.Rollback
Resume trans_Exit

End Sub