在 MS Access 表单中搜索和过滤

Search and filter in MS Access forms

背景:我有一个名为 'SNR_log' 的 table,我从中查询获得了以下列表。

接下来,我设计了一个拆分表单,带有一个文本box.In这个文本框SNR是用来从列表中查找和过滤的。要执行此操作 'Apply filter' 宏与 where 条件一起使用,

[SNR] Like "*" & [Forms]![SNR_History]![Text17] & "*"

问题:是否可以通过在文本框中插入 SNR 进行过滤并获得以下结果。

也就是说,以SNR为输入,显示UID和该UID下的所有SNR。

您无法在 "Apply Filter" 宏中执行此操作。您将需要一些 VBA 在幕后。

您要做的第一件事是查询您的数据以获得 UID。你会这样做:

Dim db as Database
Dim Rec as Recordset
Dim UIDx as Integer
Dim strSQL as String
Dim strSQL2 as String

Set db = CurrentDB
strSQL = "SELECT UID FROM SNR_Log " & _
          "WHERE [SNR] Like ""*" & [Forms]![SNR_History]![Text17] & "*""
Set Rec = db.OpenRecordSet(strSQL)

'Now grab the UID that's returned and put it inside a variable
UIDx = Rec(0)

现在您有了要查询的 UID。因此,基于此设置您的 RecordSource:

strSQL2 = "SELECT * FROM SNR_Log WHERE [UID] = " & UIDx & ""

Forms!Me!frmSubFormName.RecordSource = strSQL2
Forms!Me!frmSubFormName.ReQuery

这将更改表单的记录源,并刷新表单以查看您刚刚设置的当前记录源。

您可能需要将 strSQL 与 putz 放在一起,我不记得如何在 SQL 中使用 Like 运算符细绳。不过,我很确定它是正确的。

我能够以一种简单的方式解决它。我创建了一个主窗体和子窗体。子表单的记录源是输入信噪比的文本框。单击带有以下事件过程的命令按钮后,我获得了所需的结果;

Private Sub Command4_Click()
 Text0.SetFocus
 Me.SNR_log_Subform.Form.RecordSource = "Select * from SNR_Log where UID in(Select UID from SNR_Log where SNR like '*" & Text0.Text & "*')"
End Sub