エクセルのユーザーフォームからアクセスへの書き込むとき、日付が未入力の場合エラーがでてしまいます。
SQL文を最初は商品発送日 = #" & CDate(.TextBox3) & "#
としてたのですが、「型が一致しません」というエラーが出てしまいました。
そこでNullが原因かと思い、空白の場合はNullを入れるように下記のようなSQLDate
という変数を作って商品発送日 = #" & SQLDate(CDate(.TextBox3)) & "#
としてみましたが、やはり同じエラーが出てしまいました。
vba
1'---日付が空白の場合にNullに変換 2Function SQLDate(val As Variant) As Variant 3 If IsDate(val) = True Then 4 SQLDate = val 5 Else 6 SQLDate = Null 7 End If 8End Function
私は最近vbaを始めた者で、まだ詳しい解決策が思いつかず…。知恵をお借しいただければと思い質問させていただきました。どうぞよろしくお願いいたします。
↓全文です
vba
1'---データベースを更新 2Sub UpdateDB() 3 Call ConnectDB(False) 4On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ 5 adoCn.BeginTrans 'トランザクションを開始 6 7 With EditForm 8 strSQL = "UPDATE テーブル SET シリアルナンバー = '" & .TextBox1 & "', 顧客コード = '" & .ListBox1.List(0, 8) & "', " & _ 9 "エージェントコード = '" & .ComboBox1 & "', 直送先 = '" & .TextBox2 & "', 商品発送日 = #" & SQLDate(CDate(.TextBox3)) & "#, " & _ 10 "修理・加工受付日(1) = #" & SQLDate(CDate(.TextBox4)) & "#, 修理・加工完了日(1) = #" & SQLDate(CDate(.TextBox5)) & "#, " & _ 11 "故障内容(1) = '" & .TextBox6 & "', 修理内容(1) = '" & .TextBox7 & "', 加工内容(1) = '" & .TextBox8 & "', " & _ 12 "修理・加工受付日(2) = #" & SQLDate(CDate(.TextBox9)) & "#, 修理・加工完了日(2) = #" & SQLDate(CDate(.TextBox10)) & "#, " & _ 13 "故障内容(2) = '" & .TextBox11 & "', 修理内容(2) = '" & .TextBox12 & "', 加工内容(2) = '" & .TextBox13 & "', " & _ 14 "修理・加工受付日(3) = #" & SQLDate(CDate(.TextBox14)) & "#, 修理・加工完了日(3) = #" & SQLDate(CDate(.TextBox15)) & "#, " & _ 15 "故障内容(3) = '" & .TextBox16 & "', 修理内容(3) = '" & .TextBox17 & "', 加工内容(3) = '" & .TextBox18 & "' " & _ 16 "WHERE シリアルナンバー = '" & .TextBox1 & "' ;" 17 End With 18 19 adoCn.Execute strSQL 'データベースの更新を実行 20 21 adoCn.CommitTrans 'トランザクションを終了(確定処理) 22 Call CutDB(False) 23 24 MsgBox "正常に更新されました。" 25 Exit Sub 26 27Err_Handler: 'エラーが起きたときの飛び先 28 adoCn.RollbackTrans 29 Call CutDB(False) 30 MsgBox Error$ 31 Debug.Print Error$ 32 Debug.Print strSQL 33 34End Sub
回答3件
あなたの回答
tips
プレビュー