List 6-170 修正したDataObj.SlipコンポーネントのGetRecordsメソッド(修正個所は赤色で示した)
1: Public Function GetRecords(ByVal start_MADEDATE As Variant, _
ByVal end_MADEDATE As Variant, _
ByVal start_DELIVERDATE As Variant, _
ByVal end_DELIVERDATE As Variant, _
ByVal IncludeOtherMade As Boolean, _
ByVal filterSlip As FILTER_SLIP, _
ByVal IncludeDeleted As Boolean, _
Optional ByVal CustomerID As Long = -1 _
) As ADODB.Recordset
2: ' 指定された条件に合致する伝票の一覧を返す
3: ' 【引数】
4: ' start_MADEDATE = 起票日による絞り込みの開始日(この日を含む)。
5: ' Nullのときには絞り込みなし
6: ' end_MADEDATE = 起票日による絞り込みの終了日(この日を含む)。
7: ' Nullのときには絞り込みなし
8: ' start_DELIVERDATE = 納入予定日による絞り込みの開始日(この日を含む)。
9: ' Nullのときには絞り込みなし
10: ' end_DELIVERDATE = 納入予定日による絞り込みの終了日(この日を含む)。
11: ' Nullのときには絞り込みなし
12: ' IncludeOtherMade = 他人が起票した伝票も含むかどうかのフラグ。
13: ' Trueのときには含み,Falseのときには含まない
14: ' filterSlip = 伝票の状態による絞り込み。FILTER_SLIP列挙型の組み合わせ。
15: ' FILTER_SLIP_ALLのときにはすべての伝票
16: ' IncludeDeleted = 削除ずみを含むかどうかのフラグ。
17: ' Trueで含む。Falseで含まない
18: ' CustomerID = 顧客による絞り込み。顧客番号を指定する。
19: ' 負のときまたは省略されたときには顧客による絞り込みなし
20: ' 【戻り値】
21: ' 条件に合致する伝票の一覧を含むADODB.Recordsetオブジェクト
22: ' 戻り値となるADODB.Recordsetオブジェクトは読み取り専用の閉じたRecordset
23: Dim objContext As ObjectContext
24: Dim objRec As ADODB.Recordset
25: Dim strQuery As String
26: Dim userName As String, OrStr As String
27:
28: ' オブジェクトコンテキストの取得
29: Set objContext = GetObjectContext()
30:
31: ' エラーハンドラの設定
32: On Error GoTo ErrHandle
33:
34: ' 発行するSELECT文
35: strQuery = "SELECT 伝票情報.ID As ID, 伝票情報.CUSTOMERID, " & _
"顧客情報.NAME As CUSTOMERNAME, 伝票情報.SUBTOTAL As SUBTOTAL," & _
"伝票情報.TAX As TAX, 伝票情報.TOTAL As TOTAL," & _
"伝票情報.BILLID As BILLID, 伝票情報.BILLDATE As BILLDATE," & _
"伝票情報.MADEBILLFLAG As MADEBILLFLAG, 伝票情報.ONEBILLFLAG As ONEBILLFLAG," & _
"伝票情報.REQ_CONSENTFLAG As REQ_CONSENTFLAG, 伝票情報.REQ_CONSENTDATE As REQ_CONSENTDATE," & _
"伝票情報.REQ_CONSENTCOMMENT As REQ_CONSENTCOMMENT, 伝票情報.CONSENTEDFLAG As CONSENTEDFLAG," & _
"伝票情報.CONSENTEDDATE As CONSENTEDDATE, 伝票情報.CONSENTEDCOMMENT As COMSENTEDCOMMENT," & _
"伝票情報.REJECTEDFLAG As REJECTEDFLAG, 伝票情報.REJECTEDDATE As REJECTEDDATE," & _
"伝票情報.REJECTEDCOMMENT As REJECTEDCOMMENT, 伝票情報.SENDFLAG As SENDFLAG," & _
"伝票情報.SENDDATE As SENDDATE, 伝票情報.SENDCOMMENT As SENDCOMMENT," & _
"伝票追加情報.DIVISION As DIVISION, 伝票追加情報.PERSON As PERSON," & _
"伝票追加情報.DELIVERDATE As DELIVERDATE, 伝票追加情報.SENT_ADDR As SENT_ADDR," & _
"伝票追加情報.SENT_TEL As SENT_TEL, 伝票追加情報.MEMO As MEMO," & _
"伝票情報.ACCOUNTINGFLAG As ACCOUNTINGFLAG, 伝票情報.ACCOUNTINGDATE As ACCOUNTINGDATE," & _
"伝票情報.ACCOUNTINGCOMMENT As ACCOUNTINGCOMMENT, 伝票情報.MADEDATE," & _
"伝票情報.MADEUSER As MADEUSER, 伝票情報.REQ_CONSENTUSER As REQ_CONSENTUSER," & _
"伝票情報.CONSENTEDUSER As CONSENTEDUSER, 伝票情報.REJECTEDUSER As REJECTEDUSER," & _
"伝票情報.SENDUSER As SENDUSER, 伝票情報.ACCOUNTINGUSER As ACCOUNTINGUSER," & _
"伝票情報.LASTUSER As LASTUSER, 伝票情報.LASTDATE As LASTDATE," & _
"伝票情報.DELETEDFLAG As DELETEDFLAG" & _
" FROM 伝票情報, 顧客情報, 伝票追加情報" & _
" WHERE 伝票情報.CUSTOMERID = 顧客情報.ID" & _
" AND 伝票情報.ID = 伝票追加情報.SLIPID" & _
" AND 伝票追加情報.DELETEDFLAG = 0"
36:
37: ' 絞り込みの条件式の設定
38: If Not IsNull(start_MADEDATE) Then
39: ' 起票日による絞り込みの開始日
40: If Not IsDate(start_MADEDATE) Then
41: Err.Raise Errorcode.Err_MADEDATE, App.Title, _
"起票日による絞り込み日時が不正です"
42: End If
43: strQuery = strQuery & " AND 伝票情報.MADEDATE >= '" & _
FormatDateTime(start_MADEDATE) & "'"
44: End If
45: If Not IsNull(end_MADEDATE) Then
46: ' 起票日による絞り込みの終了日
47: If Not IsDate(end_MADEDATE) Then
48: Err.Raise Errorcode.Err_MADEDATE, App.Title, _
"起票日による絞り込み日時が不正です"
49: End If
50: strQuery = strQuery & " AND 伝票情報.MADEDATE <= '" & _
FormatDateTime(end_MADEDATE) & "'"
51: End If
52: If Not IsNull(start_DELIVERDATE) Then
53: ' 納入予定日による絞り込みの開始日
54: If Not IsDate(start_DELIVERDATE) Then
55: Err.Raise Errorcode.Err_DELIVERDATE, App.Title, _
"納入予定日による絞り込み日時が不正です"
56: End If
57: strQuery = strQuery & " AND 伝票追加情報.DELIVERDATE >= '" & _
FormatDateTime(start_DELIVERDATE) & "'"
58: End If
59: If Not IsNull(end_DELIVERDATE) Then
60: ' 納入予定日による絞り込みの終了日
61: If Not IsDate(end_DELIVERDATE) Then
62: Err.Raise Errorcode.Err_DELIVERDATE, App.Title, _
"納入予定日による絞り込み日時が不正です"
63: End If
64: strQuery = strQuery & " AND 伝票追加情報.DELIVERDATE <= '" & _
FormatDateTime(end_DELIVERDATE) & "'"
65: End If
66: If Not IncludeOtherMade Then
67: ' 他人が起票した伝票は含めない
68: ' 呼び出したユーザーのユーザー名を取得
69: userName = objContext.Security.GetOriginalCallerName()
70: strQuery = strQuery & " AND 伝票情報.MADEUSER = '" & userName & "'"
71: End If
72: If Not IncludeDeleted Then
73: ' 削除ずみを含まない
74: strQuery = strQuery & " AND 伝票情報.DELETEDFLAG = 0"
75: End If
76:
77: If CustomerID >= 0 Then
78: ' 顧客による絞り込みの追加
79: strQuery = strQuery & " AND 伝票情報.CUSTOMERID=" & CustomerID
80: End If
81:
82: ' 伝票の状態による絞り込み
83: If filterSlip <> FILTER_SLIP_ALL Then
84: strQuery = strQuery & " AND ("
85: OrStr = ""
86: If filterSlip And FILTER_SLIP_CREATING Then
87: ' 作成中の伝票だけ
88: strQuery = strQuery & OrStr
89: strQuery = strQuery & "(伝票情報.MADEBILLFLAG=0" & _
" AND 伝票情報.REQ_CONSENTFLAG=0" & _
" AND 伝票情報.CONSENTEDFLAG=0" & _
" AND 伝票情報.REJECTEDFLAG=0" & _
" AND 伝票情報.SENDFLAG=0" & _
" AND 伝票情報.ACCOUNTINGFLAG=0)"
90: OrStr = " Or "
91: End If
92:
93: If filterSlip And FILTER_SLIP_REJECTED Then
94: ' 却下された伝票だけ
95: strQuery = strQuery & OrStr
96: strQuery = strQuery & "伝票情報.REJECTEDFLAG=1"
97: OrStr = " Or "
98: End If
99:
100: If filterSlip And FILTER_SLIP_REQUESTINGCONSENT Then
101: ' 承認依頼中の伝票だけ
102: strQuery = strQuery & OrStr
103: strQuery = strQuery & "伝票情報.REQ_CONSENTFLAG=1"
104: OrStr = " Or "
105: End If
106:
107: If filterSlip And FILTER_SLIP_CONSENTED Then
108: ' 承認ずみの伝票だけ
109: strQuery = strQuery & OrStr
110: strQuery = strQuery & "伝票情報.CONSENTEDFLAG=1"
111: OrStr = " Or "
112: End If
113:
114: If filterSlip And FILTER_SLIP_SEND Then
115: ' 発送ずみの伝票だけ
116: strQuery = strQuery & OrStr
117: strQuery = strQuery & "伝票情報.SENDFLAG=1"
118: OrStr = " Or "
119: End If
120:
121: If filterSlip And FILTER_SLIP_ACCOUNTED Then
122: ' 経理確認ずみの伝票だけ
123: strQuery = strQuery & OrStr
124: strQuery = strQuery & "伝票情報.ACCOUNTINGFLAG=1"
125: OrStr = " Or "
126: End If
127:
128: If filterSlip And FILTER_SLIP_FINISH Then
129: ' すべての処理が完了した伝票のみ
130: strQuery = strQuery & OrStr
131: strQuery = strQuery & "伝票情報.MADEBILLFLAG=1"
132: End If
133:
134: strQuery = strQuery & ")"
135: End If
136: MsgBox strQuery
137:
138: ' データベースと接続し,SELECT文を発行
139: Set objRec = CreateObject("ADODB.Recordset")
140: ' カーソルロケーションをクライアントカーソルに設定
141: objRec.CursorLocation = adUseClient
142:
143: ' SELECT文の実行
144: objRec.Open strQuery, g_DBConnection, adOpenStatic, _
adLockReadOnly, adCmdText
145:
146: ' データベースコネクションの遮断
147: Set objRec.ActiveConnection = Nothing
148:
149: ' 取得したレコードセットを戻り値とする
150: Set GetRecords = objRec
151: Set objRec = Nothing
152:
153: ' トランザクションのコミット
154: objContext.SetComplete
155:
156: ' オブジェクトコンテキストの解放
157: Set objContext = Nothing
158:
159: Exit Function
160:
161: ErrHandle:
162: ' エラーハンドラ
163: objContext.SetAbort
164: Set objContext = Nothing
165: Set objRec = Nothing
166:
167: ' エラーの再発行
168: Err.Raise Err.Number, Err.Source, Err.Description, _
Err.HelpFile, Err.HelpContext
169: End Function