レコード追加時のエラー処理・トランザクションの使用方法:ExcelでADO
ExcelからADOでAccessデータベースに、一度に多くのレコードを登録する時、途中でエラーが発生すると大変です。
この場合の対処方法にトランザクションがあります。
トランザクションとは、一連の実行を一括に処理する方法で、もし途中でエラーが発生しても、全て処理をキャンセルできます。
■ トランザクションの流れ
BeginTrans : 処理前に実行
CommitTrans : 正常終了の場合、変更を保存しトランザクションを終了します。
RollbackTrans : 変更をキャンセルしトランザクションを終了します。
Homeに戻る >
Excel データベースのTipsへ
ExcelからADOでトランザクションを使用した実行画面
売上管理テーブルを使用しました。
Accessで売上テーブルを開いた画面です。
レコードが1件登録されています。
AddNew ~ Update を5回実行し、6回目に無理にエラーを発生させます。
トランザクションを使用しなければ、この時点で5件のレコードが追加されているはずです。
6回目にエラーを発生させた画面です。
トランザクション処理をしているので、5件のレコードが追加されているはずですが、開始前と同じのままです。
エラー処理部分のRollbackTransでキャンセルされたからです。
コード
Option Explicit
Private Sub CommandButton1_Click()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
On Error GoTo ErrRtn
'売上管理のACCDBファイルに接続します
Set db = New ADODB.Connection
db.Provider = "Microsoft.Ace.OLEDB.12.0"
db.Open "C:\MyHP\excel2007\Tips\売上管理.accdb"
'レコードセットを開きます
Set rs = New ADODB.Recordset
'売上テーブルを開きます
rs.Open "T_売上", db, adOpenDynamic, adLockOptimistic
'トランザクションの開始
db.BeginTrans
For i = 1 To 10
'追加開始
rs.AddNew
rs("日付") = "2010/06/28"
rs("会社名") = "株式会社早急運送"
rs("商品名") = "スチール棚"
rs("数量") = 500
rs("金額") = 4950000
'無理やりエラーを発生させる
rs("備考") = "No." & 2 / (i - 6)
'保存
rs.Update
Next
'トランザクションの保存
db.CommitTrans
'閉じる
rs.Close
db.Close
'終了処理
Set rs = Nothing
Set db = Nothing
Exit Sub
ErrRtn:
MsgBox "エラー: " & Err.Description
'BeginTransの時点まで戻り、変更をキャンセルする
db.RollbackTrans
db.Close
Set db = Nothing
End Sub
Homeに戻る >
Excel データベースのTipsへ
■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します
Copyright (c) Excel-Excel ! All rights reserved