パソコン情報

【Access】フォームの非連結コンボボックスからSQLで抽出する時の「’」「”」「&」などの使い方

帳票フォームに非連結のコンボボックスを設置して、その選択した値によって帳票フォームのソースを抽出表示したいという事がある。

今回は、VBAコードでSQLを使って抽出しているのですが、「’」「”」「&」の使い方が今一つ分からず色々とやった結果を備忘録としてまとめておこうと思います。

 

コンボボックス1個でレコードソースを抽出

 

これはなんとなくすぐにできました。

Public Sub 抽出ボタン_Click()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

On Error GoTo Err_Handler

    Set cn = CurrentProject.AccessConnection
    Set rs = New ADODB.Recordset

            With rs
            Set .ActiveConnection = cn
            .Source = "SELECT * FROM orderdata_sorting_nsys WHERE shipper ='" & Me!search_mado & "'"
            .LockType = adLockOptimistic
            .CursorType = adOpenKeyset
            .Open
            End With

        Set Me.Recordset = rs
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing

ExitErr_Handler:
        Exit Sub

Err_Handler:
        MsgBox "エラー: " & Err.description
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing
End Sub

 

つまり、SQLで抽出している部分が下記の部分になるわけだが1個だけなら「’」「”」「&」の使い方は下記のような法則で記述すればいいようです。

 

.Source = "SELECT * FROM orderdata_sorting_nsys WHERE shipper ='" & Me!search_mado & "'"

 

コンボボックス2個でAND抽出

2個になると一気に難易度があがりエラーが出たり思ったデータが抽出されなかったりと大変な事になりました。

様々なパターンの「’」「”」「&」を試してようやく抽出できるようになったコードが下記のようになります。

 

.Source = "SELECT * FROM orderdata_sorting_nsys WHERE shipper ='" & Me!search_mado & "' And delivery_name = '" & Me!delivery_mado & "'"

 

VBAコード内でSQLを使う場合は、

「”」SELECT * FROM table_name WHERE field1 =「’」「”」「&」combo1「&」「”」「’」And field2 =「’」「”」「&」combo2「&」「”」「’」「”」

と言うふうになるようです。

なにかと忘れた頃に使うので備忘録にしたいと思います。

 

更に日付範囲の抽出をAND

更に、日付範囲にて、抽出したい場合はどうしたらいいでしょうか!?

これも色々と試した結果下記のようになりました。

.Source = "SELECT * FROM orderdata_sorting_nsys WHERE shipper ='" & Me!search_mado & "' And delivery_name = '" & Me!delivery_mado & "' And pu_date Between #" & Me!pu_start & "# AND #" & Me!pu_end & "#" '"

 

未だに「’」「”」「&」の使い方が曖昧ですが、何とかできるようになったので、なんとなくこんな感じの組み合わせでANDもできるんだなって思えておけば何とかなりますね。