2011-06-29 62 views
0

我认为我接近这个,但无法完成过滤过程。使用表单组合框将查询过滤器应用于

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 

编辑:

我不知道,如果允许我回答我自己的问题,但我研究出了解决办法。 I>使用INTO把结果到一个临时表,我可以使用进一步操纵:

私人小组cmdGo_Click()

昏暗STRSQL作为字符串

STRSQL = “SELECT SUBCAT,用户ID INTO tblTemp” & _ “FROM tblIndex” & _ “WHERE PrimaryCat = '” & cboPrimaryCat.Value & “ 'AND年='” &> cboYear.Value & _ “' GROUP BY SUBCAT,用户名”

DoCmd.RunSQL STRSQL

末次

回答

-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 
+0

我想,当初是你提到的同样的原因,但得到运行时错误7874:Microsoft Access不能找到对象STRSQL“ – vbevan

+0

取出“从DoCmd.OpenQuery” STRSQL “通过了,但是我得到了相同的运行时错误,但是这意味着它有SQL语句”SELECT Subcat ......“而不是”strSQL“作为它找不到的对象 – vbevan

+0

那是因为strSQL是一个变量,你必须编写DoCmd.OpenQuery strSQL,如果你写了DoCmd.OpenQuery“strSQL”,Access会试着找到一个名字为strSQL的查询 – mnieto

1

解决了它。如果未先将其存储在查询中,则无法运行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