2011-06-29 89 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