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.
|