【发布时间】:2014-09-13 17:26:08
【问题描述】:
在过去的几天里,我一直在尝试对 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'”,当我转到主窗体的属性,过滤器下没有列出任何内容。当我按下列表时,如何使一个值出现在过滤器属性中。 (旁注:所有函数都有错误语句,我把它们取出来使它们更短)
【问题讨论】:
-
不是过滤器,你能改变记录集吗?例如stackoverflow.com/questions/13088701/…
-
记录集的where语句可以是动态的吗?
-
当然,只需将表单的记录源设置为 sql 字符串即可。如果没有好的索引,它可能会很慢。
-
我通常在设置
Filter字符串后设置FilterOn = true。你知道你没有从StartList返回任何东西吗? -
您要在此搜索的表单或其他表单上设置过滤器吗?
Me.Filter = strWhereClause是frmInstrumentInterface还是“父表单”?
标签: sql sql-server vba ms-access filter