---クラス本体---
Option Compare Database
Option Explicit
Private WithEvents sDialog As Form_StatusDialog
Private WithEvents cn As ADODB.Connection
Private rs As ADODB.Recordset
Public Event WillConnect()
Public Event Connected(cnStatus As ADODB.EventStatusEnum, cnError As ADODB.Error)
Public Event WillExecute()
Public Event ExecuteComplete(cnStatus As ADODB.EventStatusEnum, ResultRS As ADODB.Recordset, ResultRecordsAffected As Long, cnError As ADODB.Error)
Public Event DisConnected()
Private Sub Class_Initialize()
Debug.Print "******ClassInitialize******"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.ConnectionString = "ConnectionString"
rs.CursorLocation = adUseClient
End Sub
Private Sub Class_Terminate()
On Error Resume Next
DialogClose
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
Debug.Print "******ClassTerminate******"
End Sub
Private Sub cn_WillConnect(ConnectionString As String, UserID As String, Password As String, Options As Long, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
Debug.Print "WillConnect:" & Now()
DialogShow
sDialog.Status = "Connecting..."
RaiseEvent WillConnect
End Sub
Private Sub cn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
Debug.Print "ConnectComplete:" & Now()
sDialog.Status = "Connected..."
RaiseEvent Connected(adStatus, pError)
End Sub
Private Sub cn_WillExecute(Source As String, CursorType As ADODB.CursorTypeEnum, LockType As ADODB.LockTypeEnum, Options As Long, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
Debug.Print "WillExecute:" & Now()
sDialog.Status = "Executing..."
RaiseEvent WillExecute
End Sub
Private Sub cn_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
Debug.Print "ExecuteComplete:" & Now()
RaiseEvent ExecuteComplete(adStatus, pRecordset, RecordsAffected, pError)
End Sub
Private Sub cn_Disconnect(adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
Debug.Print "DisConnected:" & Now()
RaiseEvent DisConnected
End Sub
Public Sub ConnectionStart()
cn.Open , , , adAsyncConnect
End Sub
Public Sub ExecQuery(SQLstring As String)
rs.Open SQLstring, cn, adOpenKeyset, adLockOptimistic, adAsyncExecute
End Sub
Public Sub ExecQueryReadOnly(SQLstring As String)
rs.Open SQLstring, cn, adOpenForwardOnly, adLockReadOnly, adAsyncExecute
End Sub
Private Sub ConnectionCancel()
Debug.Print "Cancel:" & Now()
If cn.State = adStateExecuting And rs.State = adStateClosed Then
sDialog.Status = "Try Cancel..."
DoEvents
cn.Cancel
ElseIf cn.State = adStateOpen And rs.State = adStateExecuting Then
sDialog.Status = "Try Cancel..."
DoEvents
rs.Cancel
End If
End Sub
Public Sub ConnectionClose()
On Error Resume Next
rs.Cancel
rs.Close
cn.Cancel
cn.Close
RaiseEvent DisConnected
End Sub
Private Sub DialogShow()
Set sDialog = New Form_StatusDialog
sDialog.Modal = True
sDialog.TimerInterval = 1000 ’ダイアログ表示までのTimeInterval
End Sub
Private Sub DialogClose()
sDialog.TimerInterval = 0
sDialog.Modal = False
sDialog.Visible = False
Set sDialog = Nothing
End Sub
Private Sub sDialog_DialogbtnCancelClick()
ConnectionCancel
End Sub
Private Sub sDialog_DialogTimerEvent()
If sDialog.Visible = False Then
sDialog.Visible = True
sDialog.TimerInterval = 500 ’ダイアログアニメーション用TimeInterval
End If
End Sub
---ダイアログフォーム---
Option Compare Database
Option Explicit
Public Event DialogTimerEvent()
Public Event DialogbtnCancelClick()
Dim dcls As DefalultFormClass
Dim RectangleArray(7) As Rectangle
Dim counter As Integer
Property Let Status(i As String)
Me.labelStatus.Caption = i
End Property
Private Sub btnCancel_Click()
RaiseEvent DialogbtnCancelClick
End Sub
Private Sub Form_Load()
DoCmd.RunCommand acCmdSelectRecord
Set dcls = New DefalultFormClass
dcls.BindForm Me
Dim i As Integer
For i = 0 To 7
Set RectangleArray(i) = Me.Controls("ボックス" & i)
Next
End Sub
Private Sub Form_Timer()
RaiseEvent DialogTimerEvent
’以下アニメーション用コード
On Error GoTo ErrLabel
Dim i As Integer
i = counter Mod 8
RectangleArray(i).Visible = Not RectangleArray(i).Visible
counter = counter + 1
Exit Sub
ErrLabel:
counter = 0
Resume Next
End Sub
0 件のコメント:
コメントを投稿