0

検索をクリックすると、製品のリストが表示されるプログラムがあります。新しい製品を作成するとき、自動的に True に設定される「アクティブ」チェックボックスがあります。ユーザーは任意の製品を編集でき、必要に応じて製品を「非アクティブ」に変更できます。

検索フォームには、アクティブと非アクティブの 2 つのチェックボックスがあります。プログラムが読み込まれると、[アクティブ] チェックボックスが常にチェックされます。ユーザーが非アクティブな製品も表示したい場合は、両方にチェックを入れることができるはずです。

アクティブにチェックを入れた時点で、リストボックスにはすべてのアクティブなアイテムが表示され、非アクティブにチェックを入れたときに非アクティブなアイテムのみが表示されます。ただし、両方にチェックを入れると、非アクティブな製品のみが表示されます。

これは私のコードです:

Private Sub cmdProdSearch_Click()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim list_item As ListItem
    Dim itm As ListItem


    db_file = db_file & "ProductsDatabase1.mdb"
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ProductsDatabase1.mdb;" & _
    "Persist Security Info=False" & _
    "Data Source=" & db_file & ";" & _
    "Persist Security Info=False"
    conn.Open

    Set rs = conn.Execute("Select * from Export where Product like '%" & _
        txtProduct.Text & "%'")
    If chkActive.Value = 1 Then
        Set rs = conn.Execute("Select * from Export where Inactive = '0'")
    Else
        Set rs = conn.Execute("Select * from Export where Inactive = '1'")


        ListView1.ListItems.Clear

        With ListView1
            .View = lvwReport
            .FullRowSelect = True
            Do While Not rs.EOF
                Set itm = .FindItem(txtProduct.Text, lvwText, , lvwPartial)
                Set list_item = .ListItems.Add(, , rs!Product)
                list_item.SubItems(1) = rs!barcode & ""
                list_item.SubItems(2) = rs!quantity & ""
                list_item.SubItems(3) = rs!Department & ""
                list_item.SubItems(4) = rs!Active & ""
                list_item.SubItems(5) = rs!Inactive
                rs.MoveNext
            Loop
        End With
    End If

End Sub

また、Access データベースを使用して製品情報を保存し、SQL ステートメントを使用して情報を検索しています。

両方のチェックボックスがオンになっているときに、ボットのアクティブなアイテムと非アクティブなアイテムを表示できるようにするための提案はありますか?

4

1 に答える 1

4

ロジックを更新する必要があります。書かれているようListView1に、 の場合にのみ更新されchkActive.Value <> 1ます。

通常、SQL を保持する別の文字列変数を作成し、基準に基づいて検索を作成します...これを実行し、さまざまなチェック ボックスの論理パスを含むコードの編集を次に示します。他のチェックボックスが呼び出されていると想定していますchkInactive

Private Sub cmdProdSearch_Click()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim list_item As ListItem
    Dim itm As ListItem
    dim SQL as string

    db_file = db_file & "ProductsDatabase1.mdb"
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ProductsDatabase1.mdb;" & _
    "Persist Security Info=False" & _
    "Data Source=" & db_file & ";" & _
    "Persist Security Info=False"
    conn.Open

    SQL = "Select * from Export where Product like '%" & txtProduct.Text & "%'"
    If chkActive.Value = 1 Then
        If chkInactive.Value = 1 Then
            'do nothing because criteria is already set.
        Else
            SQL = SQL & " AND Inactive = '0'"
        End If
    ElseIf chkInactive.Value = 1 Then
        SQL = SQL & " AND Inactive = '1'"
    Else
        'Do something because neither are checked?
    End If
    Set rs = conn.Execute(SQL)
    ListView1.ListItems.Clear

    With ListView1
        .View = lvwReport
        .FullRowSelect = True
        Do While Not rs.EOF
            Set itm = .FindItem(txtProduct.Text, lvwText, , lvwPartial)
            Set list_item = .ListItems.Add(, , rs!Product)
            list_item.SubItems(1) = rs!barcode & ""
            list_item.SubItems(2) = rs!quantity & ""
            list_item.SubItems(3) = rs!Department & ""
            list_item.SubItems(4) = rs!Active & ""
            list_item.SubItems(5) = rs!Inactive
            rs.MoveNext
        Loop
    End With
End Sub
于 2012-09-14T14:17:10.117 に答える