前提・実現したいこと
テーブルにSQL実行の結果を保存したい。
チェックボックスを追加する前はエラーにはならなかった。
(CHK_ZEI 非課税選択)
発生している問題・エラーメッセージ
該当のフォーム
frm_derail_trntbl_kobai
クエリ(サブフォームである明細情報のデータシートのレコードソース)
sub_trntbl_meisai
a.WORKTBL_KOBAI_MEISAI
b.MSTTBL_KOBAIHIN
該当のテーブル
TRNTBL_KOBAI_MEISAI(登録用)
WORKTBL_KOBAI_MEISAI(入力用)
MSTTBL_KOBAIHIN(仕様書番号から品名を取得する為使用)
該当のソースコード
VBA
1'標準モジュール 2'■購買明細 3Public Type TRNTBL_KOBAI_MEISAI 4 KANRI_NO As String ' 管理番号 5 EDA As Long ' 枝番 6 SHIYO_NO As String ' 仕様書番号 7 HINMEI As String ' 品名 8 TANKA As Long ' 単価 9 SURYO As Long ' 数量 10 TANI As String ' 単位 11 KINGAKU As Long ' 金額 12 NOHIN_DATE As String ' 納品日 13 BIKO As String ' 備考 14 CHK_ZEI As Boolean ' 非課税選択 15End Type 16 17'以下サブフォーム Form_sub_trntbl_meisai内の処理 18 19' フォーム:更新前処理 20Private Sub Form_BeforeUpdate(Cancel As Integer) 21On Error GoTo Err_Proc 22 23 ' 枝番設定 24 If (Me.NewRecord) Then 25 Me.txt_EDA = Me.CurrentRecord 26 End If 27 28Exit_Proc: 29 30 Exit Sub 31 32Err_Proc: 33 MsgBox (Err.Number & ", " & Err.Description) 34 Resume Exit_Proc 35End Sub 36 37' 新規登録処理 38Public Function InsertData_Meisai(ByVal i_kanri_no As String) As Boolean 39On Error GoTo Err_Proc 40 41 Dim type_KOBAI_MEISAI As TRNTBL_KOBAI_MEISAI 42 Dim strSQL As String 43 44 With Me.Recordset 45 46 If Me.Recordset.RecordCount = 0 Then 47 MsgBox "「明細情報」が未入力です。", vbExclamation, "必須項目未入力エラー" 48 InsertData_Meisai = False 49 GoTo Exit_Proc 50 End If 51 52 ' 先頭レコードへ 53 .MoveFirst 54 55 Do Until Me.Form.Recordset.EOF 56 ' 初期化処理 57 strSQL = "" 58 59 type_KOBAI_MEISAI.SHIYO_NO = "" 60 type_KOBAI_MEISAI.HINMEI = "" 61 type_KOBAI_MEISAI.TANKA = 0 62 type_KOBAI_MEISAI.SURYO = 0 63 type_KOBAI_MEISAI.TANI = "" 64 type_KOBAI_MEISAI.KINGAKU = 0 65 type_KOBAI_MEISAI.NOHIN_DATE = "" 66 type_KOBAI_MEISAI.BIKO = "" 67 type_KOBAI_MEISAI.CHK_ZEI = 0 68 69 '=============================================== 70 ' 保存値設定 71 '=============================================== 72 type_KOBAI_MEISAI.SHIYO_NO = Nz(!SHIYO_NO, "") 73 type_KOBAI_MEISAI.HINMEI = Nz(!HINMEI, "") 74 type_KOBAI_MEISAI.TANKA = Nz(!TANKA, 0) 75 type_KOBAI_MEISAI.SURYO = Nz(!SURYO, 0) 76 type_KOBAI_MEISAI.TANI = Nz(!TANI, "") 77 type_KOBAI_MEISAI.KINGAKU = Nz(!KINGAKU, 0) 78 type_KOBAI_MEISAI.NOHIN_DATE = Nz(!NOHIN_DATE, "") 79 type_KOBAI_MEISAI.BIKO = Nz(!BIKO, "") 80 type_KOBAI_MEISAI.CHK_ZEI = Nz(!CHK_ZEI, 0) 81 82 '=============================================== 83 ' SQL文字列生成 84 '=============================================== 85 strSQL = "INSERT INTO TRNTBL_KOBAI_MEISAI (" 86 strSQL = strSQL & " KANRI_NO," 87 strSQL = strSQL & " EDA," 88 strSQL = strSQL & " SHIYO_NO," 89 strSQL = strSQL & " HINMEI," 90 strSQL = strSQL & " TANKA," 91 strSQL = strSQL & " SURYO," 92 strSQL = strSQL & " TANI," 93 strSQL = strSQL & " KINGAKU," 94 strSQL = strSQL & " NOHIN_DATE," 95 strSQL = strSQL & " BIKO," 96 strSQL = strSQL & " CHK_ZEI" 97 strSQL = strSQL & " )" 98 strSQL = strSQL & " VALUES (" 99 strSQL = strSQL & "'" & i_kanri_no & "'," 100 strSQL = strSQL & Me.CurrentRecord & "," 101 strSQL = strSQL & "'" & type_KOBAI_MEISAI.SHIYO_NO & "'," 102 strSQL = strSQL & "'" & type_KOBAI_MEISAI.HINMEI & "'," 103 strSQL = strSQL & type_KOBAI_MEISAI.TANKA & "," 104 strSQL = strSQL & type_KOBAI_MEISAI.SURYO & "," 105 strSQL = strSQL & "'" & type_KOBAI_MEISAI.TANI & "'," 106 strSQL = strSQL & type_KOBAI_MEISAI.KINGAKU & "," 107 strSQL = strSQL & "'" & type_KOBAI_MEISAI.NOHIN_DATE & "'," 108 strSQL = strSQL & "'" & type_KOBAI_MEISAI.BIKO & "'," 109 strSQL = strSQL & type_KOBAI_MEISAI.CHK_ZEI & "" 110 strSQL = strSQL & ")" 111 112 'SQL実行 113 DoCmd.RunSQL strSQL 114 115 ' 次レコードへ 116 .MoveNext 117 Loop 118 119 End With 120 121 InsertData_Meisai = True 122 123Exit_Proc: 124 Exit Function 125Err_Proc: 126 MsgBox (Err.Number & ", " & Err.Description) 127 Resume Exit_Proc 128End Function 129 130'以下フォーム Form_detail_trntbl_kobai内の処理(上の処理を呼び出す呼び出し元) 131 132'////////////////////////////////////////////////////////// 133' 134' データ追加処理 135' 136'////////////////////////////////////////////////////////// 137Private Function InsertData() As Boolean 138On Error GoTo Err_Proc 139 140 Dim type_KOBAI As TRNTBL_KOBAI 141 Dim strSQL As String 142 143 '=============================================== 144 ' 保存値セット 145 '=============================================== 146 Call SetEntryData(type_KOBAI) 147 148 '=============================================== 149 ' SQL文字列生成 150 '=============================================== 151 strSQL = "INSERT INTO TRNTBL_KOBAI (" 152 strSQL = strSQL & " KANRI_NO," 153 strSQL = strSQL & " BUSHO_CD," 154 '文字制限の為省略 155 strSQL = strSQL & " HATYU_DATE" 156 strSQL = strSQL & " )" 157 strSQL = strSQL & " VALUES (" 158 strSQL = strSQL & "'" & type_KOBAI.KANRI_NO & "'," 159 strSQL = strSQL & "'" & type_KOBAI.BUSHO_CD & "'," 160 '文字制限の為省略 161 strSQL = strSQL & "'" & type_KOBAI.HATYU_DATE & "'" 162 strSQL = strSQL & ")" 163 164 '=============================================== 165 ' 明細登録 166 '=============================================== 167 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 168 ' 1)編集明細登録 169 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 170 If (Me.sub_trntbl_meisai.Form.InsertData_Meisai(type_KOBAI.KANRI_NO) = False) Then 171 InsertData = False 172 GoTo Exit_Proc 173 End If 174 175 '=============================================== 176 ' 更新処理実行 177 '=============================================== 178 'SQL実行 179 DoCmd.RunSQL strSQL 180 181 '戻り値セット 182 InsertData = True 183 184Exit_Proc: 185 Exit Function 186 187Err_Proc: 188 MsgBox (Err.Description & ", " & Err.Number) 189 InsertData = False 190 Resume Exit_Proc 191End Function 192 193'//////////////////////////////////////////////////////////////////////////////// 194' 195' データ更新処理 196' 197'//////////////////////////////////////////////////////////////////////////////// 198Private Function UpdateData(ByVal i_kanri_no As String) As Boolean 199 200On Error GoTo Err_Proc 201 202 Dim type_KANRI As TRNTBL_KOBAI 203 Dim strSQL As String 204 205 '=============================================== 206 ' 保存値セット 207 '=============================================== 208 Call SetEntryData(type_KANRI) 209 210 '================================================ 211 ' 212 ' SQL生成 213 ' 214 '================================================ 215 strSQL = "UPDATE TRNTBL_KOBAI" 216 strSQL = strSQL & " SET BUSHO_CD = '" & type_KANRI.BUSHO_CD & "'," 217 '文字制限の為省略 218 strSQL = strSQL & " HATYU_DATE = '" & type_KANRI.HATYU_DATE & "'" 219 strSQL = strSQL & " WHERE KANRI_NO = '" & i_kanri_no & "'" 220 221 '================================================ 222 ' 223 'SQL実行セクション 224 ' 225 '================================================ 226 'SQL実行 227 DoCmd.RunSQL strSQL 228 229 '=============================================== 230 ' 明細登録 231 '=============================================== 232 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 233 ' 1)既登録明細削除 234 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 235 Dim strWhere As String 236 237 ' 抽出条件設定 238 strWhere = " WHERE KANRI_NO = '" & m_kanri_no & "'" 239 240 ' 削除処理 241 If (DeleteData("TRNTBL_KOBAI_MEISAI", strWhere) = False) Then 242 MsgBox "削除処理(経費仕様計画書の明細)でエラーが発生しました。", vbCritical, "更新処理" 243 UpdateData = False 244 GoTo Exit_Proc 245 End If 246 247 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 248 ' 2)編集明細登録 249 ' ■■■■■■■■■■■■■■■■■■■■■■■■ 250 If (Me.sub_trntbl_meisai.Form.InsertData_Meisai(m_kanri_no) = False) Then 251 UpdateData = False 252 GoTo Exit_Proc 253 End If 254 255 '戻り値セット 256 UpdateData = True 257 258Exit_Proc: 259 Exit Function 260 261Err_Proc: 262 MsgBox (Err.Description & ", " & Err.Number) 263 UpdateData = False 264 Resume Exit_Proc 265 266End Function 267
試したこと
新規登録処理にてSQLの構文に抜かりはないか、
,が正しく使われているか、データ型が正しく使われているか
ブレークポイントを使い試しましたが、どこが間違っているか
分かりませんでした。
補足情報(FW/ツールのバージョンなど)
Windows10 ACCESS2016

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 00:30
2018/05/17 00:42
2018/05/17 00:52
2018/05/17 00:59
2018/05/17 01:02
2018/05/17 01:30
2018/05/17 02:27
2018/05/17 03:13
2018/05/17 04:39 編集