トップ > 資格を活かすには > やってみよう!Excel VBAで業務改善! > 持続可能なスキーム編: 第11話「RollbackTransをテストしよう」2/4 :エラーを発生させてみる

やってみよう!Excel VBAで業務改善! 持続可能なスキーム編|第11話 「RollbackTransをテストしよう」

エラーを発生させてみる

その頃マンションでは八木くんが、近くのコンビニで買ってきたざるそばを、
ズルズルと食べています。

「トランザクション処理をテストするコードを追加したぞ。
これで実際にエラーを発生させて、動作を確認することができる…」

ざるそばを食べ終えた八木くんは、VBEのコードを再度確認します。


    :
        CN.BeginTrans
        
        For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
            sql = "SELECT * FROM 進捗TBL WHERE 番号='" & Cells(i, 1).Value & "'"
            rs.Open sql, CN, adOpenKeyset, adLockOptimistic
            
            If rs.BOF = False Then
                rs.Fields("案件").Value = Cells(i, 2).Value & "★"
                rs.Fields("担当").Value = Cells(i, 3).Value
        :
                rs.Update
                If i = 10 Then Err.Raise 6
            End If
            
            rs.Close
        Next
        
        CN.CommitTrans
    :
    Exit Sub
    
エラー:
    CN.RollbackTrans
    MsgBox "編集に失敗しました データベースは更新されません"
  :

※赤字の部分が、追加したコードです。

「うん。まず、
Cells(i, 2).Value & "★"
で、案件名の末尾に"★"を付けることにする。
正常に終了すると、CN.CommitTransで全てのレコードの更新を確定する。
しかし、10行目の処理を行ったとき、
If i = 10 Then Err.Raise 6
で強制的にエラーを発生させる。
ErrオブジェクトのRaiseメソッドは、指定した番号のエラーを生成できるんだ。
ここでは6の、オーバーフローエラーを発生させることにしよう。
この状態で実行すると…」

一覧にもどる