使用表单组合框将筛选器应用于查询

时间:2011-06-29 04:51:15

标签: sql forms ms-access vba

我认为我接近这个,但无法解决过滤过程。

tblIndex(PrimaryCat,SubCat,UserID,Year)
tblResults(SubCat,UserID)

我的表单有两个组合框和一个按钮。 ComboBox1具有tblIndex.PrimaryCat值,ComboBox2具有tblIndexYear值。

我想要的是当按下表单中的命令按钮时,当组合框值用作tblIndex上的过滤器时,tblResults会打开,显示SubCat和UserID值的列表。

这有意义吗?

我将表单的记录源设置为tblResults。我正在使用它,只需要以某种方式添加过滤:

Private Sub cmdGo_Click()

Dim strSQL As String

strSQL = "SELECT SubCat, UserID " & _
         "FROM tblIndex " & _
         "WHERE PrimaryCat = [strCat] AND Year = [strYear] " & _
         "GROUP BY SubCat, UserID"

DoCmd.OpenQuery "strSQL"

End Sub
  

编辑:

     

我不确定我是否被允许回答我自己的问题,但我找到了一个解决方案。我使用INTO将结果放入临时表中,我可以使用以下方法进行操作:

     

Private Sub cmdGo_Click()

     

Dim strSQL As String

     

strSQL =“SELECT SubCat,UserID INTO tblTemp”& _               “FROM tblIndex”& _               “WHERE PrimaryCat ='”& cboPrimaryCat.Value& “'AND Year ='”& > cboYear.Value& _               “'GROUP BY SubCat,UserID”

     

DoCmd.RunSQL strSQL

     

End Sub

2 个答案:

答案 0 :(得分:1)

解决了这个问题。如果不先将SQL存储在查询中,则无法运行SQL。解决方案是:

Private Sub cmdGo_Click()
    Dim qdfCurr As DAO.QueryDef
    Dim strSQL As String

    strSQL = "SELECT SubCat, UserID " & _
             "FROM tblIndex " & _
             "WHERE PrimaryCat  = '" & strCat.Value & "' AND Year = '" & strYear.Value & _
             "' GROUP BY SubCat, UserID"

    On Error Resume Next
    Set qdfCurr = CurrentDb.QueryDefs("TempQuery")
    If Err.Number = 3265 Then
        Set qdfCurr = CurrentDb.CreateQueryDef("TempQuery")
    End If

    qdfCurr.SQL = strSQL
    DoCmd.OpenQuery "TempQuery"
End Sub

答案 1 :(得分:-1)

我认为这样可行。使用临时表更复杂。想象一下,你有50个查询及其相应的临时表!

Private Sub cmdGo_Click()

Dim strSQL As String

strSQL = "SELECT SubCat, UserID " & _
         "FROM tblIndex " & _
         "WHERE PrimaryCat = " & Forms!FormName![strCat] & " AND Year = " & Forms!FormName![strYear] " " & _
         "GROUP BY SubCat, UserID"

DoCmd.OpenQuery strSQL

End Sub