Microsoft Access 掲示板

SQLの記述を簡略化したい / 1

4 コメント
views
4 フォロー
1

私がよくやるのは、定数で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
通報 ...