2014-07-22 25 views
1

過去幾天我一直在嘗試將過濾器應用於Access-2010表單。表格的記錄來源是表格。該過濾器是通過窗體上的一系列按鈕創建的。以下是構建濾波器訪問表單上的過濾器屬性不起作用

enter image description here

對列表按鈕事件過程的按鈕:

Private Sub btnListInterfaceLog_Click() 
    Dim List As String 
    List = StartList() 
End Sub 

StartList()函數代碼

Private Function StartList() 

    Dim strWhereClause As String 
    strWhereClause = MakeWhere() 
    MsgBox strWhereClause 

    Me.FilterOn = True 
    Me.Filter = strWhereClause 
    Me.Requery 

End function 

代碼MakeWhere()

Private Function MakeWhere() As String 

    Dim whereClause As String 
    whereClause = "" 

    If Me![cboinstrument].Enabled = True And Me![cboinstrument] <> "" Then 
     whereClause = RvAppendCondition(whereClause, "InstrumentName", "String", "=", Me![cboinstrument]) 
    End If 

    If Me![cboFolder].Enabled = True And Me![cboFolder] <> "" Then 
    whereClause = RvAppendCondition(whereClause, "folder", "String", "=", Me![cboFolder]) 
    End If 

    If Me![BatchFrom].Enabled = True And Me![BatchFrom] > 0 And Me![BatchTo].Enabled = True And Me![BatchTo] > 0 Then 
    whereClause = RvAppendCondition(whereClause, "BatchID", "Number", "=", Me![BatchFrom], Me![BatchTo]) 
    End If 

    If Me![AnalyzedFrom].Enabled = True And Me![AnalyzedFrom] > 0 And Me![AnalyzedTo].Enabled = True And Me![AnalyzedTo] > 0 Then 
    whereClause = RvAppendCondition(whereClause, "Dateofbatch", "Date", "=", Me![AnalyzedFrom], Me![AnalyzedTo]) 
    End If 

    MakeWhere = whereClause 

End Function 

RvAppendCondition函數接受給定的字符串並向where語句添加一個新參數。它已經過無數次的測試和工作,所以你不必非常關注它。如果問我可以包括代碼以供參考。

例如:如果我所做的是選擇儀器名稱(從:組合框),並留下空白,然後按列表,strWhereClause將msgbox「[InstrumentName] ='ICPMS'」,並且當我沒有錯誤時我去主窗體的屬性沒有列出過濾器下。我如何設置它,這樣當我按下列表時,值將出現在過濾器屬性中。 (旁註:所有函數都有錯誤陳述,我把它們拿出來使它們更短)

+0

而不是過濾器,你能改變記錄集嗎?例如http://stackoverflow.com/questions/13088701/access-crash-when-changing-form-filter/13089178#13089178 – Fionnuala

+0

記錄集的where語句是動態的嗎? – VictoriaJay

+0

當然,只需將表單的記錄源設置爲一個sql字符串即可。如果你沒有好的指數,它可能會很慢。 – Fionnuala

回答

0

這是你的代碼應該是什麼。

Private Sub btnListInterfaceLog_Click() 
    Dim strWhereClause As String 
    strWhereClause = MakeWhere() 
    MsgBox strWhereClause 

    Me.Filter = strWhereClause 
    Me.FilterOn = True 
End Sub 

Private Function MakeWhere() As String 

    Dim whereClause As String 

    If Me![cboinstrument].Enabled = True And Me![cboinstrument] <> "" Then 
     whereClause = whereClause & "(InstrumentName = '" & Me![cboinstrument] & "') AND " 
    End If 

    If Me![cboFolder].Enabled = True And Me![cboFolder] <> "" Then 
     whereClause = whereClause & "(folder = '" & Me![cboFolder] & "') AND " 
    End If 

    If Me![BatchFrom].Enabled = True And Me![BatchFrom] > 0 And Me![BatchTo].Enabled = True And Me![BatchTo] > 0 Then 
     whereClause = whereClause & "(BatchID BETWEEN " & Me![BatchFrom] & " AND " & Me![BatchTo] & ") AND " 
    End If 

    If Me![AnalyzedFrom].Enabled = True And Me![AnalyzedFrom] > 0 And Me![AnalyzedTo].Enabled = True And Me![AnalyzedTo] > 0 Then 
     whereClause = whereClause & "(Dateofbatch BETWEEN " & Format(Me![AnalyzedFrom], "\#mm\/dd\/yyyy\#") & _ 
            " AND " & Format(Me![AnalyzedTo], "\#mm\/dd\/yyyy\#") & ") AND " 
    End If 

    MakeWhere = Left(whereClause, Len(whereClause) - 5) 

End Function 
+0

我實現了這個代碼,並且Filter屬性中仍然沒有字符串。我msgbox strWhereclause,它是「[InstrumentName] ='ICPMS'和[批次間] 100和100」批次設置從100到100和FROM:組合框是ICPMS – VictoriaJay

+0

但主頁選項卡中的切換篩選器按鈕突出顯示,所以也許有一個過濾器,但由於某種原因,它似乎沒有影響記錄來源? – VictoriaJay

+0

嘗試編輯的代碼,您的RvAppendCondition不放置正確的圓括號。這在多個標準中非常重要。 – PaulFrancis