List 6-20 DataObj.Historyコンポーネント
  1: Implements IObjectConstruct
  2: Implements ObjectControl
  3: 
  4: ' データベース接続文字列
  5: Dim g_DBConnection As String
  6: 
  7: Private Sub IObjectConstruct_Construct(ByVal pCtorObj As Object)
  8:     ' コンストラクタ文字列を取得し,変数g_DBConnectionに代入
  9:     g_DBConnection = pCtorObj.ConstructString()
 10: End Sub
 11: 
 12: Private Sub ObjectControl_Activate()
 13:     ' アクティブ化されたときにg_DBConnection変数が初期化されていなければ
 14:     ' デフォルトの値を設定する
 15:     If g_DBConnection = "" Then
 16:         g_DBConnection = "Driver=SQL Server;Server=(local);UID=sa;Database=businesssampleDB;"
 17:     End If
 18: End Sub
 19: 
 20: Private Sub ObjectControl_Deactivate()
 21:     ' 非アクティブ化されたときの処理(ここでは何もしない)
 22: End Sub
 23: 
 24: Private Function ObjectControl_CanBePooled() As Boolean
 25:     ' オブジェクトのプーリングの設定(Visual Basicの場合には無意味)
 26:     ObjectControl_CanBePooled = True
 27: End Function
 28: 
 29: Public Sub AddHistory(ByVal TABLENAME As String, ByVal FIELDNAME As String, _
                           ByVal RECORDID As Long, _
                           ByVal OLDDATA As Variant, ByVal NEWDATA As Variant)
 30:     ' 履歴テーブルに履歴情報を加える
 31:     ' 【引数】
 32:     '   TABLENAME = テーブル名
 33:     '   FIELDNAME = フィールド名
 34:     '   RECORDID = 更新されたレコードID
 35:     '   OLDDATA = 古いデータの値
 36:     '   NEWDATA = 新しいデータの値
 37:     ' 【戻り値】
 38:     '   なし
 39:     Dim objContext As ObjectContext
 40:     Dim objRec As ADODB.Recordset
 41:     Dim userName As String, NowDate As Date
 42:     
 43:     ' オブジェクトコンテキストの取得
 44:     Set objContext = GetObjectContext()
 45:     
 46:     ' エ悼ーハンドラの設定
 47:     On Error GoTo ErrHandle
 48:     
 49:     ' ユーザー名と現在の時刻を取得
 50:     userName = objContext.Security.GetOriginalCallerName()
 51:     NowDate = Now()
 52:     
 53:     ' データベースに接続して,履歴情報を記述する
 54:     Set objRec = CreateObject("ADODB.Recordset")
 55:     objRec.Open "履歴", g_DBConnection, adOpenKeyset, _
                     adLockPessimistic, adCmdTable
 56:     
 57:     ' 新しいレコードを追加
 58:     objRec.AddNew
 59:     
 60:     ' レコードにデータを設定
 61:     objRec.Fields("DATE").Value = NowDate
 62:     objRec.Fields("TABLENAME").Value = TABLENAME
 63:     objRec.Fields("FIELDNAME").Value = FIELDNAME
 64:     objRec.Fields("RECORDID").Value = RECORDID
 65:     objRec.Fields("OLDDATA").Value = OLDDATA
 66:     objRec.Fields("NEWDATA").Value = NEWDATA
 67:     objRec.Fields("UPDATEUSER").Value = userName
 68:     
 69:     ' データベースに反映
 70:     objRec.Update
 71:     
 72:     ' データベースとの接続を閉じてレコードセットを解放
 73:     objRec.Close
 74:     Set objRec = Nothing
 75:     
 76:     ' コミットする
 77:     objContext.SetComplete
 78:     
 79:     ' オブジェクトコンテキストの解放
 80:     Set objContext = Nothing
 81:     
 82:     Exit Sub
 83: 
 84: ErrHandle:
 85:     ' エラーハンドラ
 86:     objContext.SetAbort
 87:     Set objContext = Nothing
 88:     Set objRec = Nothing
 89:     
 90:     ' エラーの再発行
 91:     Err.Raise Err.Number, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
 92: End Sub