2016-05-24 5 views
0

アクセスデータベースから大量のデータをフィルタリングする必要があります。私はこれを達成するためのプログラムを構築していますが、フィルタで複数​​の基準を使用する際の問題にぶつかります。複数の条件でデータセットをフィルタリングする

If RadioButton1.Checked Then 
    If RadioButton4.Checked Then 
     Me.BindingSource.Filter = "[January] = 'True' AND [Red] = 'True'" 
    ElseIf RadioButton5.Checked Then 
     Me.BindingSource.Filter = "[January] = 'True' AND [Yellow] = 'True'" 
    ElseIf RadioButton6.Checked Then 
     Me.BindingSource.Filter = "[January] = 'True' AND [Blue] = 'True'" 
    Else Me.BindingSource.Filter = "[January] = 'True'" 
    End If 
ElseIf RadioButton2.Checked Then 
    If RadioButton4.Checked Then 
     Me.BindingSource.Filter = "[February] = 'True' AND [Red] = 'True'" 
    ElseIf RadioButton5.Checked Then 
     Me.BindingSource.Filter = "[February] = 'True' AND [Yellow] = 'True'" 
    ElseIf RadioButton6.Checked Then 
     Me.BindingSource.Filter = "[February] = 'True' AND [Blue] = 'True'" 
    Else Me.BindingSource.Filter = "[February] = 'True'" 
    End If 
ElseIf RadioButton3.Checked Then 
    If RadioButton4.Checked Then 
     Me.BindingSource.Filter = "[March] = 'True' AND [Red] = 'True'" 
    ElseIf RadioButton5.Checked Then 
     Me.BindingSource.Filter = "[March] = 'True' AND [Yellow] = 'True'" 
    ElseIf RadioButton6.Checked Then 
     Me.BindingSource.Filter = "[March] = 'True' AND [Blue] = 'True'" 
    Else Me.BindingSource.Filter = "[March] = 'True'" 
    End If 
End If 

さて、これも3ヶ月と色の大量のコードがある:例えば、ここで指定された月と色を使用して選択のためのテストコードです。これを行うにはより良い方法が必要です。そうですか?テーブルの多くのフィールドを並べ替える必要があるので、このようにするには何年もかかるだろう。コードの場合

+2

。色の束と同じです。 – Plutonix

+0

その理由は、アイテムが複数の月、複数の色などを持つ可能性があるからです。 – MoNoGoAt

+1

これは単なるデザイン上の欠陥です.1:mの関係が欠落しています。それは1つの属性を記述するのに12の列を取らない。 – Plutonix

答えて

0

あなたはの線に沿って、カラーボタンから月のボタンを分割する必要があります:あなたは数ヶ月のために12のブール列ではなく、1つの文字列の列を持っている場合、私は、DBの設計を再検討したい

Dim wc as string 
'months 
    if RadioButto1.Checked then wc = "January = true" 
elseif radiobutton2.checked then wc = "February = true" 
. . . . 

end if 
'colours 
If radiobutton4.checked then 
wc &= " AND Red = true" 
elseif radiobutton5.checked then 
wc &= " AND Yellow = true" 
. . . . . 
end if 


me.bindingsource.filter = wc 
+0

私はfilterコマンドで変数を使用しようとしましたが、構文が一致していなかったため、構文が一致して何が起こるかを確認します。 – MoNoGoAt

+0

これはすごくうまくいっています。月を除く、色が選択されている場合の追加Ifグループを追加するだけでした。いくつかの機能を完成させたら、完全なデータベースをカバーするようにコードを拡張することができます。ありがとう、トン! – MoNoGoAt

0

この単純な、あなたはswitch文を使用することができます。

Dim sMonth As String 
Dim sColor As String 

sMonth = Switch(RadioButton1.Checked, "[January]", RadioButton2.Checked, "[February]", RadioButton3.Checked, "[March]") 
sColor = Switch(RadioButton4.Checked, "[Red]", RadioButton5.Checked, "[Yellow]", RadioButton6.Checked, "[Blue]") 

Me.BindingSource.Filter = sMonth & " = 'True' AND " & sColor & " = 'True'" 

これはまだ読み取り可能です。また、Select Caseステートメントを使用することもできます。トリックは、2つの部分に分けることです。

+0

VB.NETには 'Switch'関数がありません。 MSAccessタグは、OPがデータリポジトリとしてアクセスを使用することを意味すると思います。 – Plutonix

+0

またはOPは彼の質問に誤ってタグを付けました。元のコードは有効なVBAです。 – kismert

+0

申し訳ありませんが、SQLやその他のものではなくアクセスデータベースを使用しているため、ms-accessというタグを付けました。 – MoNoGoAt

関連する問題