List 6-123 DataObj.SlipDetailコンポーネントのAddRecordメソッド
  1: Private Sub Chk_ProductID(ProductID As Variant)
  2:     ' 製品番号が正しいかどうかを調査
  3:     If IsNull(ProductID) Then
  4:         Err.Raise Errorcode.Err_PRODUCTID, App.Title, _
                       "製品番号が設定されていません"
  5:     Else
  6:         If Not IsNumeric(ProductID) Then
  7:             Err.Raise Errorcode.Err_PRODUCTID, App.Title, _
                           "製品番号が正しい数値でありません"
  8:         End If
  9:     End If
 10: End Sub
 11: 
 12: Private Sub Chk_NUMBER(NUMBER As Variant)
 13:     ' 数量が正しいかどうかを調査
 14:     If IsNull(NUMBER) Then
 15:         Err.Raise Errorcode.Err_NUMBER, App.Title, _
                       "数量が設定されていません"
 16:     Else
 17:         If Not IsNumeric(NUMBER) Then
 18:             Err.Raise Errorcode.Err_PRODUCTID, App.Title, _
                           "数量が正しい数値ではありません"
 19:         End If
 20:     End If
 21: End Sub
 22: 
 23: Private Sub Chk_PRICE(PRICE As Variant)
 24:     ' 価格が正しいかどうかを調査
 25:     If IsNull(PRICE) Then
 26:         Err.Raise Errorcode.Err_PRICE, App.Title, _
                       "価格が設定されていません"
 27:     Else
 28:         If Not IsNumeric(PRICE) Then
 29:             Err.Raise Errorcode.Err_PRICE, App.Title, _
                           "価格が正しい数値ではありません"
 30:         End If
 31:     End If
 32: End Sub
 33: 
 34: Private Sub Chk_MEMO(ByRef MEMO As Variant)
 35:     ' 摘要が正しいかどうかを調査
 36:     If Not IsNull(MEMO) Then
 37:         If Len(MEMO) > 80 Then
 38:             Err.Raise Errorcode.Err_MEMOTOOLONG, App.Title, _
                           "摘要は80文字以内でなければなりません"
 39:         End If
 40:     End If
 41: End Sub
 42: 
 43: Private Sub Chk_SLIPID(ByRef SlipID As Variant)
 44:     ' 伝票番号が正しいかどうかを調査
 45:     If IsNull(SlipID) Then
 46:         Err.Raise Errorcode.Err_SLIPID, App.Title, _
                       "伝票番号が不正です"
 47:     Else
 48:         If Not IsNumeric(SlipID) Then
 49:             Err.Raise Errorcode.Err_SLIPID, App.Title, _
                           "伝票番号が有効な数字ではありません"
 50:         End If
 51:     End If
 52: End Sub
 53: 
 54: Public Function AddRecord(ByVal ProductID As Variant, _
                               ByVal NUMBER As Variant, _
                               ByVal UNITPRICE As Variant, _
                               ByVal PRICE As Variant, _
                               ByVal MEMO As Variant, _
                               ByVal SlipID As Variant) As Long
 55:     ' 明細情報テーブルに新しいレコードを追加
 56:     ' 【引数】
 57:     '   ProductID = 明細の対象となる製品の製品番号
 58:     '   NUMBER = 数量
 59:     '   UNITPRICE = 製品単価
 60:     '   PRICE = 製品価格
 61:     '   MEMO = 摘要
 62:     '   SlipID = 結び付ける伝票の伝票番号
 63:     ' 【戻り値】
 64:     ' 追加した明細を示すレコードID(IDフィールドに設定された値)
 65:     Dim objContext As ObjectContext
 66:     Dim objRec As ADODB.Recordset
 67:     Dim userName As String, NowDate As Date
 68:     
 69:     ' オブジェクトコンテキストの取得
 70:     Set objContext = GetObjectContext()
 71:     
 72:     ' エラーハンドラの設定
 73:     On Error GoTo ErrHandle
 74:     
 75:     ' ユーザー名と現在の時刻を取得
 76:     userName = objContext.Security.GetOriginalCallerName()
 77:     NowDate = Now()
 78:     
 79:     ' 与えられた引数が正しいかどうかをチェック
 80:     Chk_ProductID ProductID
 81:     Chk_NUMBER NUMBER
 82:     Chk_PRICE UNITPRICE
 83:     Chk_PRICE PRICE
 84:     Chk_MEMO MEMO
 85:     Chk_SLIPID SlipID
 86:     
 87:     ' データベースと接続して,書き込み可能なレコードセットを取得
 88:     Set objRec = CreateObject("ADODB.Recordset")
 89:     objRec.Open "明細情報", g_DBConnection, adOpenKeyset, _
                      adLockPessimistic, adCmdTable
 90:     
 91:     ' 新しいレコードを追加
 92:     objRec.AddNew
 93:     
 94:     ' レコードにデータを設定
 95:     objRec.Fields("PRODUCTID").Value = ProductID
 96:     objRec.Fields("NUMBER").Value = NUMBER
 97:     objRec.Fields("UNITPRICE").Value = UNITPRICE
 98:     objRec.Fields("PRICE").Value = PRICE
 99:     objRec.Fields("MEMO").Value = MEMO
100:     objRec.Fields("SLIPID").Value = SlipID
101:     objRec.Fields("MADEUSER").Value = userName
102:     objRec.Fields("MADEDATE").Value = NowDate
103:     objRec.Fields("LASTUSER").Value = userName
104:     objRec.Fields("LASTDATE").Value = NowDate
105:     objRec.Fields("DELETEDFLAG").Value = False
106:     
107:     ' データベースに反映
108:     objRec.Update
109:     
110:     ' 追加したレコードIDを戻り値として設定
111:     AddRecord = objRec.Fields("ID").Value
112:     
113:     ' データベースとの接続を閉じてレコードセットを解放
114:     objRec.Close
115:     Set objRec = Nothing
116:     
117:     ' トランザクションをコミット
118:     objContext.SetComplete
119:     
120:     ' オブジェクトコンテキストの解放
121:     Set objContext = Nothing
122:     
123:     Exit Function
124: 
125: ErrHandle:
126:     ' エラーハンドラ
127:     objContext.SetAbort
128:     
129:     Set objContext = Nothing
130:     Set objRec = Nothing
131:     
132:     ' エラーの再発行
133:     Err.Raise Err.NUMBER, Err.Source, Err.Description, _
                   Err.HelpFile, Err.HelpContext
134: End Function