データの検索条件に汎用性を持たせるため、エンドユーザ側で条件や値を選べるようにしたいと思います。
とりあえず、今回はBindingSourceにフィルターを掛けるだけの簡単な内容とします。
まず、前回の記事をベースに4つのオブジェクトを追加します。
・Button2・・・フィルター実行ボタン
・ComboBox1・・・検索項目(列名)
・ComboBox2・・・検索条件(論理演算子)
・TextBox1・・・検索値
ComboBox1(項目)のItemsには列名を追加します。
ComboBox1のText値で取得するので、実際の列名と同名にします。
ComboBox2(条件)のItemsには下図の検索条件を追加します。
演算子は使い手に分り易くしているだけです。プログラム上はIndex値で取得させるので、そこまで書かなくても大丈夫です。
最後に、Button2のクリックで以下のコードを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Dim My_VAL As String = TextBox1.Text Dim My_SQL As String = Nothing Dim My_SQL_WHERE As String = Nothing Select Case ComboBox2.SelectedIndex Case 0 My_SQL_WHERE &= " = '" & My_VAL & "'" Case 1 My_SQL_WHERE &= " <> '" & My_VAL & "'" Case 2 My_SQL_WHERE &= " > '" & My_VAL & "'" Case 3 My_SQL_WHERE &= " >= '" & My_VAL & "'" Case 4 My_SQL_WHERE &= " < '" & My_VAL & "'" Case 5 My_SQL_WHERE &= " <= '" & My_VAL & "'" Case 6 My_SQL_WHERE &= " LIKE '%" & My_VAL & "%'" Case 7 My_SQL_WHERE &= " LIKE '" & My_VAL & "%'" Case 8 My_SQL_WHERE &= " LIKE '%" & My_VAL & "'" Case 9 My_SQL_WHERE &= " LIKE '" & My_VAL & "'" Case 10 My_SQL_WHERE &= " IN ('" & My_VAL.Replace(",", "','") & "')" Case 11 My_SQL_WHERE &= " Is Null " Case 12 My_SQL_WHERE &= " Is Not Null " End Select My_SQL_WHERE = ComboBox1.Text & My_SQL_WHERE Debug.Print(My_SQL_WHERE) BindingSource1.Filter = My_SQL_WHERE End Sub |
これを実行すると、下図の通りBindingSourceにフィルターを掛けられます。
ちなみに演算子IN句を選択した場合の使い方としては、値1,値2,値3,…とカンマ区切りだけで、条件式を生成する様にしてます。
あと、フィルター解除は「BindingSource1.Filter = Nothing」です。
【項目】【値】【条件】の3要素をエンドユーザに選択させるだけで、SQL文を意識せず簡単に検索が出来るようになります。
今回は、BindingSourceに対してフィルターを掛けるだけですが、応用するとデータベース検索向けのSQL文を生成できますので汎用性はあるかと思います。