Vba 我尝试级联组合框(4个组合框)来过滤信息,只看到适当的结果

Vba 我尝试级联组合框(4个组合框)来过滤信息,只看到适当的结果,vba,ms-access,combobox,Vba,Ms Access,Combobox,我尝试级联组合框(4个组合框)来过滤信息,只看到适当的结果。我实际上不知道从这一点上如何声明和如何使用我的信息,我有一些代码,但我没有结果。。。所有的组合都是空的 我找到了如何在组合中单独添加代码的解决方案,但我尝试进行动态筛选,因为条件是更改结果 Private Sub Ctl1_Click() Dim db As Database Dim rec As Recordset Dim AreaFromV As String Dim AreaToV As Stri

我尝试级联组合框(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

字符串变量不能保持null,因此测试null是没有意义的,真实条件永远不会处理。测试空字符串

如果strSQLc1=“”,则

然而,由于代码只是设置strSQLc1的值,所以实际上甚至不需要测试字符串是否为空——它永远不可能为空。其他SQL变量也是如此

在每个续行的末尾需要分隔符空间,以便生成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]”之后留出空间:

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

然后您需要代码隐藏按钮,该按钮使用组合框选择来构建应用于表单或报表的筛选条件

级联组合框和使用VBA构建动态筛选条件都是常见的主题。


好的,那么你的问题是什么?在开始处放置一个断点,然后在调试器中逐步完成代码。注意连接到
strSQLc1
strSQLc4
strSQL
的字符串是什么样子。此外,您似乎没有使用这些字符串来实际查询数据库。难怪,你看不到任何结果。一如既往,如果你发布了你的数据和你想要的结果,这会有所帮助。通常,您希望将所有条件合并到一个长筛选器中。例如:在查询语句中使用AreaToV和AreaFromV以及polv和podv毫无意义。将RowSource设置为这些变量也没有意义。构造的strSQL从未在任何地方使用过。您的代码不是“层叠”组合框。级联需要每个组合框后面的代码根据上一个组合框中的选择设置其行源。所有代码都是一个过程。