Accessでクラスモジュールを使ってみた

クラスモジュールを新規作成

~DCrpStockDao~
Option Compare Database
Option Explicit

Private Const C_MSG_TITLE = "締め処理クラス"
Private m_cutoffDiv As Integer    ' 締日区分
Private m_cutoffDate As Date      ' 締日年月日
Private m_ownerCrpCode As String  ' 荷主コード

Rem -----------------------------------------------------------
Rem     関数名   : Class_Initialize
Rem     処理内容 : クラスの初期処理
Rem     引  数  : なし
Rem     戻り値  : なし
Rem -----------------------------------------------------------
Private Sub Class_Initialize()
    m_cutoffDiv = 0
    m_ownerCrpCode = ""
End Sub

Rem -----------------------------------------------------------
Rem     関数名   : Class_Terminate
Rem     処理内容 : クラスの初期処理
Rem     引  数  : なし
Rem     戻り値  : なし
Rem -----------------------------------------------------------
Private Sub Class_Terminate()

End Sub

'***************************
' 締日区分をセット
'***************************
Public Property Let setCutoffDiv(ByVal value As Integer)
    m_cutoffDiv = value
End Property

'***************************
' 締日年月日をセット
'***************************
Public Property Let setCutoffDate(ByVal value As Date)
    m_cutoffDate = value
End Property

'***************************
' 荷主コードをセット
'***************************
Public Property Let setOwnerCrpCode(ByVal value As String)
    m_ownerCrpCode = value
End Property

Rem -----------------------------------------------------------
Rem     関数名   : goShime
Rem     処理内容 : 締め実行処理
Rem     引  数  : なし
Rem     戻り値  : true(正常)/false(異常)
Rem -----------------------------------------------------------
Public Function goShime() As Boolean
Dim objCmd As New ADODB.command
Dim objRsCrp As New ADODB.Recordset
Dim objRs As New ADODB.Recordset
Dim objRsDtl As New ADODB.Recordset
Dim strSql As String
Dim baseID As Long
Dim crpId As Long

On Error GoTo EXCEPTION

~省略~

Exit Function
EXCEPTION:
    MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical, "締め実行処理 1/6 (メイン)"
End Function

各画面からクラスモジュールを呼び出す

    '*** データベースを開く
    gobjCon.ConnectionString = conConnectStr
    gobjCon.Open

    '*** トランザクション開始
    gobjCon.BeginTrans

    '*** クラス定義
    Set crpStockDao = New DCrpStockDao
    ' 締年月日
    crpStockDao.setCutoffDate = CDate(Me.txt締年月日.value)
    ' 締日区分
    crpStockDao.setCutoffDiv = Nz(Me.cbo締日区分.value)
    ' 荷主コード
    crpStockDao.setOwnerCrpCode = Nz(Me.txt荷主コード.value)

    '=================
    ' MAIN処理
    '=================
    ' (1)締め処理実行
    If crpStockDao.goShime() = False Then
        GoTo Error_Rollback
    End If

    ' (2)

    ' (3)


    '*** コミット
    gobjCon.CommitTrans

    '*** 後処理
    gobjCon.Close: Set gobjCon = Nothing

    ' マウスを元に戻す
    Application.Echo True
    DoCmd.Hourglass False

    '=================
    ' 終了メッセージ
    '=================
    MsgBox "締め処理が正常に終了しました。", vbInformation + vbOKOnly, C_MSG_TITLE

Exit Sub
Error:
    MsgBox "エラーが発生しました。エラー内容:" & ERR.Description & Chr$(10), vbCritical, C_MSG_TITLE
    
Error_Rollback:
On Error Resume Next
    ' ロールバック
    gobjCon.RollbackTrans
    ' 後処理
    gobjCon.Close: Set gobjCon = Nothing
    ' マウスを元に戻す
    Application.Echo True
    DoCmd.Hourglass False
End Sub

クラスモジュールは、在庫データ更新とか重要な処理をクラスにまとめておき(javaでいうところのDAOみたいな)
各々画面からCALLするという形を取りました。
クラス定義をnewでsetしてクラスで使う変数をsetしてからメインメソッドをCALLするような作りにしました。
メリットは在庫データ更新はここに集約したので、メンテナンスしやすいという点でしょうか。
標準モジュールでも良いような気もしますが、今回はちょっと使ってみたくてクラスモジュールを使ってみました。

コメント

タイトルとURLをコピーしました