【问题标题】:Search and filter in MS Access forms在 MS Access 表单中搜索和过滤
【发布时间】:2015-05-27 12:38:34
【问题描述】:

背景:我有一个名为“SNR_log”的表,我已从中查询以获取以下列表。

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

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

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

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

【问题讨论】:

  • 主窗体和子窗体设置不能为您解决吗?文本框是过滤子表单的控件?
  • 我认为我无法使用您的方法定义这种方式“使用 SNR 在 UID 中显示每个 SNR”。
  • 您是否尝试过使用组合框而不是文本框

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


【解决方案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

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

您可能不得不对 strSQL 进行一些处理,我不记得究竟如何在 SQL 字符串中使用 Like 运算符。不过,我很确定这是正确的。

【讨论】:

  • 我尊重您的方法,先生。感谢您的帮助和时间。
【解决方案2】:

我能够以一种简单的方式解决它。我创建了一个主窗体和子窗体。子表单的记录源是输入 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-10-15
    相关资源
    最近更新 更多