【发布时间】:2013-09-30 05:37:16
【问题描述】:
注意:我对 VBA 很陌生。 我正在尝试为我们的自定义过滤器创建一个 Or 功能,用户可以在其中选择过滤一个或另一个。我认为用户需要选择所有三个字段、比较和标准以使其成为一个选择,然后当 Or 按钮被点击时,将生成另一个选择,依此类推......直到点击 过滤按钮。我有过滤器上的代码,到目前为止它确实有效。
这只是我到目前为止的一个愚蠢的草稿 私有子 cmdOr_Click()
Dim selectOr As Integer
这里我不知道如何将这三个字段设置为一个指标
selectOr = Field & Comparison & Criteria
If IsNull(selectOr) Then
MsgBox "All three fields, Comparison and Criteria must be selected", vbOKCancel, "Filter"
Else
在这里我想增加我的
selectOr,以便用户可以选择尽可能多的Or选项
selectOr 1
End Sub
我希望我是清楚的,如果不是请告诉我!谢谢!
到目前为止,这是我的过滤器按钮中的内容。注意:还有字典、集合等用到的模块。
Private Sub cmdOK_Click()
Dim Filter As IFilter, filterString As String, filterComparison As String, FilterCriteria As String, sanitizedFilterCriteria As
String, PrimaryFilter As String, primarySchema As String,
primaryTable As String, primaryKey As String, targetTable As String,
targetField As String, Target() As String, filterItem As
ControlDefinition_Filter
Me.Dirty = False
'Gather data for the primary filter from the active form
With XFormToFilter
.ResetFilter
Set .FilterBuilder.FormToFilter = FormToFilter
PrimaryFilter = IIf(.BaseFilter = vbNullString, _
.NullFilter, _
.BaseFilter)
primaryTable = .FilterTable
primaryKey = .key
End With
With Me.RecordsetClone
If .RecordCount > 0 Then
.MoveFirst
Do While Not .EOF
'Get the schema, table/view, and control targetted by the filter
Target = Split(.fields("Field").Value, ".")
targetTable = IIf(Left(Target(0), 6) = "SELECT", GetTableName(Target(0)), Target(0))
targetField = Target(1)
filterComparison = Nz(.fields("Comparison").Value, vbNullString)
FilterCriteria = Nz(.fields("Criteria").Value, vbNullString)
Set filterItem = filterDict.item(.fields("Field").Value)
If filterItem.HasCriteria Then 'Get the stored equivalent for the criterion if available
sanitizedFilterCriteria = filterItem.GetCriteriaValue(FilterCriteria)
If sanitizedFilterCriteria <> vbNullString Then _
FilterCriteria = sanitizedFilterCriteria
End If
filterString = _
CreateFilterString(.fields("FieldType"), targetField, targetTable, _
filterComparison, FilterCriteria)
filterString = FilterRegExp(filterString)
If Filter Is Nothing Then
Set Filter = XFormToFilter.FilterBuilder
Filter.SetPrimaryFilter PrimaryFilter, primaryTable, primaryKey
End If
Filter.AddSubFilter "Filter" & .fields("ID"), _
filterString, targetTable, subformDict(targetTable)
.MoveNext
Loop
End If
End With
If Not Filter Is Nothing Then
Dim finalFilter As String
Filter.OpenFilteredRecordset
XFormToFilter.SetFoundRecords
DoCmd.Close acForm, "Filter_Create_popup", acSaveNo
End If
'error handling is here
End Sub`
【问题讨论】:
-
你说的不是很清楚。
-
谢谢。现在怎么样?
-
更好。那么您的问题是“我如何保证所有 3 个字段都已填写”或“我如何使用这些字段来查询数据库?”
-
嗯...查询数据库是在 Filter 按钮中编码的,我想将此 Or 引用到 Filter 这样无论何时单击过滤器,它都会查看是否单击了 Or,如果是,则使用数据库中的表进行过滤。简单地说,我只是想让它就像任何其他 Ors 的功能一样。
-
那么您想知道如何在查询中引用表单上的字段吗?
标签: ms-access stored-procedures vba filtering