-2

我有这个要求,我必须根据其他字段中给出的数据检查数据。我有“N”个字段的表。我应该允许用户从表中选择 4 个字段。然后我应该获取该特定记录的所有其他字段并将其显示给用户,以便他可以验证他输入到表中的数据是否正确。请帮忙。

谢谢

4

1 回答 1

0

我现在对您的需求有了更清晰的了解-希望这就是您所需要的:


假设您有一个名为“电话”的表

电话表具有三个主要字段:制造商、操作系统和运营商 除了这些主要字段之外,还有辅助“规范”字段。现在我们有三个: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 方法来定位记录。如果找到,它将移动到记录中。

希望这能回答你的问题。正如我所指出的,确切的行为会有所不同,但基本原理保持不变。

于 2013-08-28T19:39:19.630 回答