在MS Access表单中搜索和过滤

时间:2015-03-24 09:07:41

标签: forms ms-access access-vba ms-access-2010

背景:我有一个名为' SNR_log'的表格,我在其中查询以获取以下列表。table SNR_Log

接下来,我设计了一个带有文本框的拆分表单。在此文本框中,SNR用于从列表中查找和过滤。要执行此操作,请应用过滤器'宏与where条件一起使用,



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




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

换句话说,以SNR作为输入,显示UID以及该UID下的所有SNR。

2 个答案:

答案 0 :(得分:1)

您无法在"应用过滤器"中执行此操作。宏。你在幕后需要一些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

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

你可能需要稍微使用strz,我不记得如何使用SQL字符串中的 Like 运算符。不过,我确定它是正确的。

答案 1 :(得分:0)

我能够以一种简单的方式解决它。我创建了一个主窗体和子窗体。子表单的记录源是输入SNR的文本框。一旦单击命令按钮并在其中执行以下事件过程,我就获得了所需的结果;



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