| Access Tips by pPoy |
| Module | ADOとDAOを使用したトランザクション 《Recordset》 (Access2000,Access2002) |
Accessで複数のテーブルにまたがる更新処理をする場合、トランザクションを使用すると便利です。 これは、一旦全ての更新作業を完了し、 その後の判定で、実際の更新を反映させるか元に戻すかを決定します。 その結果一連の作業による、データの整合性が確保されます。 以下は Recordset に対してのトランザクションの使用例です。
| |
|---|---|---|---|
| 1.ADOを使用の場合 ≪ADOTrans() ≫ |
Sub ADOTrans()
'ADOを使用したトランザクション
'2001/11/07 pPoy
Dim cnn As ADODB.Connection
Dim rst1 As New ADODB.Recordset
Dim rst2 As New ADODB.Recordset
Dim cnt As Integer
Set cnn = CurrentProject.Connection
rst1.Open "TD_成績1", cnn, adOpenDynamic, adLockPessimistic
rst2.Open "TD_成績2", cnn, adOpenDynamic, adLockPessimistic
'トランザクションを開始する。
cnn.BeginTrans
'ここに記述した一連の処理の間は
'ほかのデータベース処理が割り込むことはない。
Do Until rst1.EOF
rst2.AddNew
For cnt = 0 To rst1.Fields.count - 1
rst2(cnt) = rst1(cnt)
Next cnt
rst2.Update
rst1.MoveNext
Loop
If MsgBox("Save all changes?", vbYesNo) = vbYes Then
'トランザクションを正常に終了する。
cnn.CommitTrans
Else
'トランザクションを中止させる。
cnn.RollbackTrans
End If
rst1.Close: rst2.Close: cnn.Close
Set cnn = Nothing
End Sub
|
|
2.DAOを使用の場合 ≪DAOTrans() ≫ |
Sub DAOTrans()
'DAOを使用したトランザクション
'2001/11/07 pPoy
Dim wsp As DAO.Workspace
Dim mdb As DAO.Database
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim cnt As Integer
Set wsp = DBEngine.Workspaces(0)
Set mdb = wsp.Databases(0)
Set rst1 = mdb.OpenRecordset("TD_成績1")
Set rst2 = mdb.OpenRecordset("TD_成績2")
' トランザクションの開始
wsp.BeginTrans
Do Until rst1.EOF
rst2.AddNew
For cnt = 0 To rst1.Fields.count - 1
rst2(cnt) = rst1(cnt)
Next cnt
rst2.Update
rst1.MoveNext
Loop
If MsgBox("Save all changes?", vbYesNo) = vbYes Then
'トランザクションを正常に終了する。
wsp.CommitTrans
Else
'トランザクションを中止させる。
wsp.Rollback
End If
rst1.Close: rst2.Close
mdb.Close: wsp.Close
Set rst1 = Nothing: Set rst2 = Nothing
Set mdb = Nothing: Set wsp = Nothing
End Sub
|
≪注意≫
|
☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
form mail はこちら
Copyright(C) pPoy 2001