DAO3.6 トランザクション処理を含んだサンプル 
	
	 		
	
	 
	 
フォームのコード
 
VERSION 5.00 
Begin VB.Form Form1  
   Caption         =   "Form1" 
   ClientHeight    =   2640 
   ClientLeft      =   60 
   ClientTop       =   345 
   ClientWidth     =   6825 
   LinkTopic       =   "Form1" 
   ScaleHeight     =   2640 
   ScaleWidth      =   6825 
   StartUpPosition =   3  'Windows の既定値 
   Begin VB.CommandButton Command1  
      Caption         =   "DAO3.6" 
      Height          =   795 
      Left            =   2220 
      TabIndex        =   0 
      Top             =   840 
      Width           =   2475 
   End 
End 
Attribute VB_Name = "Form1" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = False 
Attribute VB_PredeclaredId = True 
Attribute VB_Exposed = False 
 
Option Explicit 
'DAO3.6 を参照設定 
'DAO3.6の場合はAccess97 2000両方とも扱える 
 
 
Private Sub Command1_Click() 
'DAOを使用してmdbを更新処理 
'トランザクション処理を使用 
On Error GoTo SOS 
   
  Dim RS As DAO.Recordset 
 
  If GF_DbOpen <> 0 Then '規定のワークスペースを使ってデータベースを開く 
     'エラー発生の為終了 
      Call GS_DAO_End 'データベースを閉じる 
      Exit Sub 
  End If 
   
  G_Wsdao.BeginTrans 'トランザクションの開始 
   
   
  If GF_RsOpen(RS, "select * from テーブル1") = 0 Then 
    'レコードセットオープンの成功 
    RS.Edit  '更新 
    RS.Fields("AA").Value = "A" 
    RS.Update 
    G_Wsdao.CommitTrans 'トランザクションコミット 
    Call GS_RsClose(RS)  'レコードセットを閉じる 
     
  Else 
    'レコードセットオープンに失敗した場合 
    G_Wsdao.Rollback 'ロールバックするとrsオブジェクトが 中途半端に削除される 
'    If RS Is Nothing Then 
'       MsgBox "" 
'    Else 
'       Debug.Print RS.RecordCount 
'    End If 
    Call GS_RsClose(RS)  'レコードセットを閉じる 
    Call GS_DAO_End 'データベースを閉じる 
    Exit Sub 
  End If 
   
   
 
  Call GS_DAO_End 'データベースを閉じる 
 
''''Open App.Path & "\結果.txt" For Output As #1 
''''' 他のモードで開く前に、このファイルを一度閉じます。 
''''   Print #1, "DAO3.6 OK" 
'''' 
''''Close #1 
''''Dim strpath 
''''strpath = " " & App.Path & "\結果.txt" 
''''ret = Shell("notepad.exe" & strpath, vbNormalFocus) 
 
 
Exit Sub 
SOS: 
 
   MsgBox Err.Description, vbCritical 
   Err.Clear 
    
'On Error GoTo 0 'これを書いても以下の処理On Error Resume Nextは有効にならない無駄 
'On Error Resume Next  'エラーは無視 error処理の中のこの処理は無効らしい?? 
 
   G_Wsdao.Rollback 'ロールバックするとrsオブジェクトが 中途半端に削除される 
   Call GS_RsClose(RS)  'レコードセットを閉じる 
   Call GS_DAO_End 'データベースを閉じる 
   Err.Clear 'エラーのクリア 
 
End Sub 
 
  |  
  
 
標準モジュール 
 
Attribute VB_Name = "DB_DAO" 
 
Option Explicit 
 
Public G_Wsdao As DAO.Workspace 'DAOワークスペース 
Public G_Dbdao As DAO.Database 'DAOデータベース 
 
Public Function GF_DbOpen() As Long 
'ここから始まる 
On Error GoTo SOSGF_DbOpen 
 
    Set G_Wsdao = DBEngine.Workspaces(0) '規定のワークスペース 
'    既定のワークスペース 
'  アプリケーションから初めて DAO オブジェクトを参照した場合に、 
'  DAO によって自動的に作成される Workspace オブジェクトです。 
'  この Workspace は、DBEngine.Workspaces(0)、または単に Workspaces(0) と記述することにより参照できます。 
 
    Set G_Dbdao = G_Wsdao.OpenDatabase(App.Path & "\test.mdb")    ' データベースオープン 
 
    GF_DbOpen = 0 'エラーなし 
    Exit Function 
 
SOSGF_DbOpen: 
     
    MsgBox Err.Description, vbCritical, "GF_DbOpenデータベースエラー" 
    GF_DbOpen = Err.Number 'エラーナンバーを返す 
    Err.Clear  'エラーをクリアする 
 
End Function 
 
 
'  レコードセットOpen  
Public Function GF_RsOpen(ByRef RS As DAO.Recordset, ByVal Sql As String) As Long 
 
On Error GoTo SOSGF_RsOpen 
 
    Set RS = G_Dbdao.OpenRecordset(Sql, dbOpenDynaset) 
    
    GF_RsOpen = 0 'エラーなし 
    Exit Function 
 
SOSGF_RsOpen: 
     
    MsgBox Err.Description, vbCritical, "GF_RsOpenデータベースエラー" 
    GF_RsOpen = Err.Number 'エラーナンバーを返す 
    Err.Clear  'エラーをクリアする 
     
End Function 
 
'  レコードセットClose  
Public Sub GS_RsClose(ByRef RS As DAO.Recordset) 
On Error Resume Next 'これを書いておかないとエラーの場合呼び出し元のエラー処理に入ってしまう 
    RS.Close 
    Set RS = Nothing 
  Err.Clear 'エラーをクリアしておく 
End Sub 
 
 
'  終了処理  
Public Sub GS_DAO_End() 
On Error Resume Next 'これを書いておかないとエラーの場合呼び出し元のエラー処理に入ってしまう 
    G_Dbdao.Close  ' データベースクローズ 
    G_Wsdao.Close  ' ワークスぺースクローズ 
    Set G_Dbdao = Nothing 
    Set G_Wsdao = Nothing 
  Err.Clear 'エラーをクリアしておく 
End Sub
 
  |  
  
 
 
	©  2004 I Love Balard. All Rights Reserved. 
	 	
	
	
		
		
	 
 |