クラスモジュールを新規作成
~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するような作りにしました。
メリットは在庫データ更新はここに集約したので、メンテナンスしやすいという点でしょうか。
標準モジュールでも良いような気もしますが、今回はちょっと使ってみたくてクラスモジュールを使ってみました。
コメント