从Access中的表中获取记录

时间:2013-08-28 17:11:37

标签: ms-access

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

由于

1 个答案:

答案 0 :(得分: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

此函数根据所选的组合框选项返回一个过滤字符串。

选项#1:过滤记录集 我们想要发生的是,当选择主要字段值时,过滤记录以仅显示与条件匹配的记录。将以下代码添加到Retrieve按钮的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方法来查找记录。如果找到,它将移动到记录。

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