我有这个要求,我必须根据其他字段中给出的数据检查数据。我有“N”个字段的表。我应该允许用户从表中选择 4 个字段。然后我应该获取该特定记录的所有其他字段并将其显示给用户,以便他可以验证他输入到表中的数据是否正确。请帮忙。
谢谢
我有这个要求,我必须根据其他字段中给出的数据检查数据。我有“N”个字段的表。我应该允许用户从表中选择 4 个字段。然后我应该获取该特定记录的所有其他字段并将其显示给用户,以便他可以验证他输入到表中的数据是否正确。请帮忙。
谢谢
我现在对您的需求有了更清晰的了解-希望这就是您所需要的:
假设您有一个名为“电话”的表
电话表具有三个主要字段:制造商、操作系统和运营商 除了这些主要字段之外,还有辅助“规范”字段。现在我们有三个:ScreenSize、Frequencies 和 Price。
我创建了一个包含三个组合框的表单:ManufacturerFilter、OperatingSystemFilter 和 CarrierFilter。
每个组合框的行源类似于:
SELECT Carrier FROM Phones GROUP BY Carrier ORDER BY Carrier;
其中运营商分别替换为制造商和[操作系统]。
然后我添加了所有辅助字段,每个辅助字段都绑定到各自的字段。
您还可以添加一个名为“检索”的按钮,现在将点击代码留空。
在这一点上,你有几个选择。我将强调两个,但这两个选项都需要以下过程:
Private Function FilterStr() As String
Dim myFilterStr As String
' Include each filter if they are entered
If Nz(Me.ManufacturerFilter, "") <> "" Then myFilterStr = myFilterStr & "[Manufacturer]='" & Me.ManufacturerFilter.Value & "' AND"
If Nz(Me.OperatingSystemFilter, "") <> "" Then myFilterStr = myFilterStr & "[Operating System]='" & Me.OperatingSystemFilter.Value & "' AND"
If Nz(Me.CarrierFilter, "") <> "" Then myFilterStr = myFilterStr & "[Carrier]='" & Me.CarrierFilter.Value & "' AND"
' Remove the last AND statement
If myFilterStr <> "" Then myFilterStr = Mid(myFilterStr, 1, Len(myFilterStr) - 4)
FilterStr = myFilterStr
End Function
此函数根据选择的组合框选项返回一个过滤器字符串。
Option #1: Filter the Recordset What we want to occur, is when a primary field value is selected, the records are filtered to display only those matching the criteria. 将以下代码添加到检索按钮的 OnClick 事件中:
Private Sub RetreiveButton_Click()
Dim myFilterStr As String
myFilterStr = FilterStr
If myFilterStr <> "" Then
Me.Filter = myFilterStr
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End Sub
因此,单击按钮时会发生什么,即根据所选值创建过滤器字符串,然后将过滤器应用于表单。如果在组合框中未选择任何值,则过滤器将被清除并关闭。
选项#2:根据值查找记录 我们想要的是选择组合框中的值,然后移动到与条件匹配的记录。
将以下代码添加到检索按钮的 onClick 事件中。
Private Sub RetreiveButton_Click()
Dim rst As DAO.Recordset
Dim myFilterStr As String
myFilterStr = FilterStr()
If myFilterStr = "" Then
MsgBox "No Filter Selected", vbOKOnly, "Error"
Exit Sub
End If
Set rst = Me.RecordsetClone
rst.FindFirst myFilterStr
If rst.NoMatch Then
MsgBox "No Matching Records were found", vbOKOnly, "No Data"
Else
Me.Bookmark = rst.Bookmark
End If
Set rst = Nothing
End Sub
这使用相同的 FilterStr() 函数来返回搜索字符串,但使用记录集的 FindFirst 方法来定位记录。如果找到,它将移动到记录中。
希望这能回答你的问题。正如我所指出的,确切的行为会有所不同,但基本原理保持不变。