Microsoft Access 掲示板

フォームの入力/未入力に対応する更新SQL / 3

7 コメント
views
3
hatena 2025/04/09 (水) 23:03:51 修正 >> 1

前者のコードだと、Me!change_Biko がNullのとき、WHERE の直前に , が来ることになりSQLエラーになりますね。
例えば、直前に, を付けておいて最後に先頭の, を削除してSQL文を完成させるようにすればいいでしょう。

Dim strSQL As String
If Not IsNull(Me!change_Date) Then strSQL = ", [完成日付]=" &  Format(Me!change_Date, "\#yyyy/mm/dd\#") 
If IsDate(Me!change_Kokyaku) Then strSQL = strSQL & ", [顧客ID]=" & Me!change_Kokyaku
If Not IsNull(Me!change_Firm) Then strSQL = strSQL & ", [firmID]=" & Me!change_Firm
If Not IsNull(Me!change_Tanto) Then strSQL = strSQL & ", [製造担当者ID]=" & Me!change_Tanto
If Not IsNull(Me!change_Biko) Then strSQL = strSQL & ", [備考]='" & Me!change_Biko & "'"

If strSQL = "" Then Exit Sub

strSQL = "UPDATE [T_製造履歴] SET " & Mid(strSQL, 3) & " WHERE [check]=True;"
CurrentDb.Execute strSQL

後者のコードはカレントレコードの値で上書きしてしまいますね。
「元の値と同じ値で書き換える」なら下記のような感じになるかと。

Dim txDt  As String, koID As String, fiID As String, taID As String, txBiko As String
txDt = IIf(IsNull(Me!change_Date), "[完成日付]", Format(Me!change_Date, "\#yyyy/mm/dd\#"))
koID = Nz(Me.change_Kokyaku, "[顧客ID]") 
fiID = Nz(Me.change_Firm, "[firmID]") 
taID = Nz(Me.change_Tanto, "[製造担当者ID]")
txBiko = IIf(IsNull(Me.change_Biko), "[備考]", "'" & Me.change_Biko & "'")

Dim strSQL As String
strSQL = "UPDATE [T_製造履歴] " & _
         "SET [完成日付]=" & txDt & ", " & _
         "[顧客ID]=" & koID & ", " & _
         "[firmID]=" & fiID & ", " & _
         "[製造担当者ID]=" & taID & ", " & _
         "[備考]=" & txBiko & " " & _
         "WHERE [check]=True;"

CurrentDb.Execute strSQL
通報 ...
  • 4
    hiroton 2025/04/10 (木) 09:26:05 b4b71@f966d >> 3

    あー、そうですね。訂正ありがとうございます
    フォームに見えてるデータならDAOでやるかなぁとか考えていたらろくにテストもせず投稿してしまいました