Access Tips by pPoy

  
トップへ←Top    QueryへQuery  FormへForm  ReportへReport  Module(Sub)へSub  Module(Function)へFunction  ExcelへExcel  Etc.へEtc.

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
この頁のTOPへTop
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
≪注意≫
  • Access2000 や Access2002 で DAO を使用する場合は、お使いの正しいバージョンの
    DAO への参照設定が必要です。

  • この sub ステートメントを実行する為には、[TD_成績1] テーブル及び
    [TD_成績2] テーブルが必要です。

  • トランザクションはネストすることもできます。

  • SQL に対してトランザクションを実行する方法は、こちら です。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら

Copyright(C) pPoy 2001