投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/8/29 15:34:55
ADO 版のコードを修正。

> Else
>   MsgBox("失敗。INSERT された件数が 1 ではありませんでした。: " & CStr(affected))
>   ' ロールバック処理 
>   conn.RollbackTrans()
>   level -= 1
> End If

この部分は、下記のようにするべきかもしれません。

Else
  MsgBox("失敗。INSERT された件数が 1 ではありませんでした。: " & CStr(affected))
  ' ロールバック処理 
  conn.RollbackTrans()
End If
level -= 1


この場合の level 変数は入れ子のトランザクションのネスト数を差しており、
JET の場合、最大で 5 段階までのネストをサポートしているそうです。
一番外側のトランサクションがコミットされるまで、データベースには反映されません。

ただし入れ子のトランザクションを許可していないデータベースもあります。
また、内側のトランクションでロールバックした場合の動作は、
データベースによって実装が異なる点に注意が必要です。
https://qiita.com/yuba/items/9b5b86bc3e128a84db5e