hiroton
2025/04/09 (水) 16:18:37
96ec1@f966d
プログラミングにおける変数への値の代入処理は右辺に自分自身(変数)を指定して、自身の内容を書き換える処理が記述できます
x = 1
x = x + 1
Debug.Print x '=>2
ここで記述している「=」は変数への代入命令の記述であるということに注意してください
入力状態をチェックしながらstrSQLを生成していけばいいですね
If IsNull(Me!change_Date) And IsNull(Me!change_Kokyaku) And IsNull(Me!change_Firm) And IsNull(Me!change_Tanto) And IsNull(Me!change_Biko) Then Exit Sub
Dim strSQL As String
strSQL = "UPDATE [T_製造履歴] SET "
If Not IsNull(Me!change_Date) Then strSQL = strSQL & "[完成日付]=#" & Format(Me!change_Date, "yyyy/mm/dd") & "#, "
If Not IsNull(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 & "' "
strSQL = strSQL & "WHERE [check]=-1 ;"
CurrentDb.Execute strSQL
もしくは、「元の値と同じ値で書き換える」としても更新分だけを更新することになります
If Me!change_Date & Me!change_Kokyaku & Me!change_Firm & Me!change_Tanto & Me!change_Biko & "" = "" Then Exit Sub
Dim strSQL As String
strSQL = "UPDATE [T_製造履歴] " & _
"SET [完成日付]=#" & Format(Nz(Me!change_Date, Me!完成日付), "yyyy/mm/dd") & "#, " & _
"[顧客ID]=" & Nz(Me!change_Kokyaku, Me!顧客ID) & ", " & _
"[firmID]=" & Nz(Me!change_Firm, Me!firmID) & ", " & _
"[製造担当者ID]=" & Nz(Me!change_Tanto, Me!製造担当者ID) & ", " & _
"[備考]='" & Nz(Me!change_Biko, Me!備考) & "' " & _
"WHERE [check]=-1 ;"
CurrentDb.Execute strSQL
Nz関数を使って、「更新後の値がなければ元の値を使う」ように指示しています
通報 ...
前者のコードだと、Me!change_Biko がNullのとき、
WHEREの直前に,が来ることになりSQLエラーになりますね。例えば、直前に
,を付けておいて最後に先頭の,を削除してSQL文を完成させるようにすればいいでしょう。後者のコードはカレントレコードの値で上書きしてしまいますね。
「元の値と同じ値で書き換える」なら下記のような感じになるかと。
あー、そうですね。訂正ありがとうございます
フォームに見えてるデータならDAOでやるかなぁとか考えていたらろくにテストもせず投稿してしまいました