hatena
hatena
2024/08/30 (金) 14:34:53
私がよくやるのは、定数でSQLを宣言しておいて、変更がある部分(今回はWHERE句)はマークを付けたワードにしておく。
WHERE句のみ生成して、Repalceでマークワードを生成した条件式で置換する。
条件式の生成は、今回のように3条件ぐらいなら、ElseIf で分岐していっても何とかなるが、条件が多くなると収拾がつかなくなるので、条件変数に条件を随時追加していくようにする。
あと、提示のコードをみると 製品ID は入力必須、出荷月のみの入力はNGのようなので、そのチェックを追加しておいたほうがいいでしょう。
コード例
Private Sub cb注番選択_GotFocus()
Const conSQL = _
"SELECT DISTINCT [注番] " & _
"FROM [Q製品出荷履歴1Form用RS] " & _
"WHERE 【Where】 " & _
"ORDER BY [注番];"
Dim varID As Variant, varYear As Variant, varMonth As Variant
varID = Me.[製品ID]
varYear = Me.[cb出荷の年]
varMonth = Me.[cb出荷の月]
If IsNull(varID) Then
MsgBox "製品IDを入力してください。"
Me.[製品ID].SetFocus
Exit Sub
End If
If IsNull(varYear) And Not IsNull(varMonth) Then
MsgBox "出荷年を選択してください。"
Me.[cb出荷の年].SetFocus
Exit Sub
End If
Dim strWhere As String
strWhere = "[製品ID]=" & varID
If Not IsNull(varYear) Then
strWhere = strWhere & " AND Year([出荷日付])=" & varYear
End If
If Not IsNull(varYear) Then
strWhere = strWhere & " AND Month([出荷日付])=" & varMonth
End If
Me.[cb注番選択].RowSource = Replace(conSQL, "【Where】", strWhere)
End Sub
通報 ...