過去幾天我一直在嘗試將過濾器應用於Access-2010表單。表格的記錄來源是表格。該過濾器是通過窗體上的一系列按鈕創建的。以下是構建濾波器訪問表單上的過濾器屬性不起作用
對列表按鈕事件過程的按鈕:
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'」,並且當我沒有錯誤時我去主窗體的屬性沒有列出過濾器下。我如何設置它,這樣當我按下列表時,值將出現在過濾器屬性中。 (旁註:所有函數都有錯誤陳述,我把它們拿出來使它們更短)
而不是過濾器,你能改變記錄集嗎?例如http://stackoverflow.com/questions/13088701/access-crash-when-changing-form-filter/13089178#13089178 – Fionnuala
記錄集的where語句是動態的嗎? – VictoriaJay
當然,只需將表單的記錄源設置爲一個sql字符串即可。如果你沒有好的指數,它可能會很慢。 – Fionnuala