我试图制作一个组合框(4个组合框)以过滤信息并仅查看适当的结果

问题描述 投票:0回答:1

我尝试制作一个级联的组合框(4个组合框)以过滤信息并仅查看适当的结果。从这一点来看,我几乎不知道如何声明和如何使用我所拥有的信息,我有一些代码,但没有结果...所有组合都是空的。

我找到了有关如何在组合中单独添加代码的解决方案,但由于条件会更改结果,因此我尝试进行动态过滤。

Private Sub Ctl1_Click()

    Dim db As Database
    Dim rec As Recordset
    Dim AreaFromV As String
    Dim AreaToV As String
    Dim PolV As String
    Dim PodV As String
    Dim strSQL As String
    Dim strSQLc1 As String
    Dim strSQLc2 As String
    Dim strSQLc3 As String
    Dim strSQLc4 As String



    strSQLc1 = "SELECT DISTINCT Seafreights.[Area From]"
    strSQLc1 = strSQLc1 & "FROM Seafreights"
    strSQLc1 = strSQLc1 & "ORDER BY Seafreights.[Area From];"

    If IsNull(strSQLc1) Then
        AreaFromV = 0
        Me.Requery
        Me.[1].RowSource = ""
        Me.[1].RowSource = AreaFromV
    Else
        AreaFromV = strSQLc1
        [Forms]![pricelist]![1].RowSource = AreaFromV
        Me.Requery
        Me.[1].RowSource = ""
        Me.[1].RowSource = AreaFromV
    End If



    'AreaFromV = IIf([Forms]![pricelist]![1] Is Null, 0, [Forms]![pricelist]![1])

    strSQLc2 = "SELECT DISTINCT Seafreights.[Area To], Seafreights.[Area From]"
    strSQLc2 = strSQLc2 & "FROM Seafreights"
    strSQLc2 = strSQLc2 & "WHERE(((Seafreights.[Area From]) = AreaFromV))"
    strSQLc2 = strSQLc2 & "ORDER BY Seafreights.[Area To];"

    If IsNull(strSQLc2) Then
        AreaToV = 0
        Me.Requery
    Else
        AreaToV = strSQLc2
        [Forms]![pricelist]![2].RowSource = AreaToV
        Me.Requery
    End If

    'AreaToV = IIf([Forms]![SeaFreight]![2] Is Null, [Forms]![SeaFreight]![2], 0)

    strSQLc3 = "SELECT DISTINCT Seafreights.[Port of Loading], Seafreights.[Area From]"
    strSQLc3 = strSQLc3 & "FROM Seafreights"
    strSQLc3 = strSQLc3 & "WHERE(((Seafreights.[Area From]) = AreaToV))"
    strSQLc3 = strSQLc3 & "ORDER BY Seafreights.[Port of Loading];"

    If IsNull(strSQLc3) Then
        PolV = 0
        Me.Requery
    Else
        PolV = strSQLc3
        [Forms]![pricelist]![3].RowSource = PolV
        Me.Requery
    End If


    'PolV = IIf([Forms]![SeaFreight]![3] Is Null, [Forms]![SeaFreight]![3], 0)

    strSQLc4 = "SELECT DISTINCT Seafreights.[Port of Discharge], Seafreights.[Area To] "
    strSQLc4 = strSQLc4 & "FROM Seafreights"
    strSQLc4 = strSQLc4 & "WHERE(((Seafreights.[Area To]) = AreaToV))"
    strSQLc4 = strSQLc4 & "ORDER BY Seafreights.[Port of Discharge];"

    If IsNull(strSQLc4) Then
        PodV = 0
        Me.Requery
    Else
        PodV = strSQLc4
        [Forms]![pricelist]![4].RowSource = PodV
        Me.Requery
    End If

    'PodV = IIf([Forms]![SeaFreight]![4] Is Null, [Forms]![SeaFreight]![4], 0)

    strSQL = "SELECT Seafreights.[Area From], " & _
            "Seafreights.[Area To]," & _
            "Seafreights.[Port of Loading]," & _
            "Seafreights.[Port of Loading Locodes]," & _
            "Seafreights.[Port of Discharge]," & _
            "Seafreights.[Port of Discharge Locodes], " & _
            "Seafreights.Commodity, " & _
            "Seafreights.Curr, " & _
            "Seafreights.[20'STD], " & _
            "Seafreights.[40'STD/HC], " & _
            "Seafreights.Effective, " & _
            "Seafreights.Expiration, " & _
            "Seafreights.[Not Subject To], " & _
            "Seafreights.[Subject to Contract  (see Sheets Arbitraries + Inlands and Surch], Seafreights.[Subject to Tariff Charges], " & _
            "Seafreights.[GEO from], " & _
            "Seafreights.[GEO To], " & _
            "Seafreights.[Amend- ment #], " & _
            "Seafreights.[Owner Sales Hierarchy], " & _
            "Seafreights.[SVC ID]"

    strSQL = strSQL & "FROM Seafreights "
    strSQL = strSQL & "WHERE (((Seafreights.[Area From])= AreaFromV) " & _
            "AND ((Seafreights.[Area To])= AreaToV) " & _
            "AND ((Seafreights.[Port of Loading])= polv) " & _
            "AND ((Seafreights.[Port of Discharge])= podv)) "
    strSQL = strSQL & "ORDER BY Seafreights.[Area From], Seafreights.[Area To], Seafreights.[Port of Loading], Seafreights.[Port of Discharge];"


End Sub
vba ms-access combobox
1个回答
0
投票

字符串变量不能为null,因此测试null是没有意义的,并且True条件将永远不会处理。测试空字符串。

If strSQLc3 = "" Then

在每个续行末尾用于构建strSQLc1和strSQLc2以及strSQLc3和strSQLc4 SQL语句的分隔符空间:

    strSQLc1 = "SELECT DISTINCT Seafreights.[Area From] "
    strSQLc1 = strSQLc1 & "FROM Seafreights "
    strSQLc1 = strSQLc1 & "ORDER BY Seafreights.[Area From];"

对于strSQL,“ Seafreights。[SVC ID]”之后也需要空格:"Seafreights.[SVC ID] "

对于级联组合框,将代码放在组合框事件中,以根据在另一个组合框中选择的值来设置其RowSource。使用AfterUpdate和/或GotFocus事件。

然后,您需要按钮后面的代码,该按钮使用组合框选择来构建过滤条件以应用于表单或报表。

级联组合框和使用VBA构建动态过滤条件都是常见的主题。Cascading Combo Boxes - Dependent Box is Blankhow to show query results in a datasheet in the same form?

© www.soinside.com 2019 - 2024. All rights reserved.