使用 Microsoft Access 数据库中的表单同时搜索多个文本

Multiple Search Text at the same time using Forms in Microsoft Access Database

提问人:Kunal Purohit 提问时间:11/6/2023 最后编辑:GustavKunal Purohit 更新时间:11/7/2023 访问量:54

问:

我是 Access 的新手,所以如果这听起来像是一个非常简单的问题,请原谅我。

在 Access 中,我有一个包含我的数据的表,此外我还创建了一个表单,作为我的数据的搜索引擎。在搜索框中一次输入一个搜索文本后,表单可以完美运行。虽然,当我想在搜索框中粘贴多个搜索文本(以行形式显示)时,表单似乎不起作用。我希望我的最终用户可以选择在我的搜索框中一次粘贴多达 20 个搜索元素并显示所有相应的结果。

例如,这是我一次搜索一次的搜索文本“7783-26-4” 现在,我希望将下面的整个列粘贴为我的搜索文本

  • 7783-26-4
  • 13821-46-1
  • 13075-28-0

我已使用查询构建器为表单创建了一个查询。对于单个搜索元素,条件如下:

Like "*" & [Forms]![MyFormName]![MySearchText] & "*"

我尝试同时修改多个搜索文本的查询,如下所示:

    [Field1] Like "*" & [Forms]![MyFormName]![MySearchText] & "*" 
AND [Field2] Like "*" & [Forms]![MyFormName]![MySearchText] & "*"

这似乎行不通。此外,我的搜索文本包含多个字段。例如:名称、ID、参考编号、代码。

我还一次附加一个搜索元素的 VBA 代码以供参考。

Private Sub Clear_Click()

Me.SearchBox = ""
Me.Searchtext = ""
Me.Searchtext.SetFocus
Me.ListResult.Requery

End Sub

Private Sub SearchBox_Change()

Me.Searchtext = Me.SearchBox.Text
Me.ListResult.Requery

End Sub
VBA MS-Access MS 访问-2010

评论

1赞 Kostas K. 11/7/2023
尝试使用 OR not AND: 。[Field1] Like "*" & [...] & "*" OR [Field2] Like "*" & [...] & "*"
0赞 Kunal Purohit 11/15/2023
嘿古斯塔夫。对不起,回复晚了。另外,感谢您的帮助。我之前尝试过使用此选项,尽管代码需要对搜索表单进行更多规范。无论如何,现在已经弄清楚了。:)

答:

1赞 Mika O. 11/7/2023 #1

如果您每次搜索只使用一个文本字段,那么我可能会这样做:

有两个表,原始表包含数据,然后是结构相同但包含一些条件的表。

enter image description here

现在,像这样的查询会根据 ID 生成通用数据:

enter image description here

那么 SQL 如下所示SELECT Data.Name_, Data.ID, Data.RefNo, Data.Code FROM Temp INNER JOIN Data ON Temp.ID = Data.ID;

然后在主窗体中有一个主窗体和两个子窗体:enter image description here

然后是 Search-button click 事件的代码:

Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim qdfTemp As QueryDef
Dim qdfNew As QueryDef
Dim f As Field
Dim seachFieldName As String
Dim i As Long

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("temp", dbOpenDynaset, dbReadOnly)

'Go to row 1 in temp table and check which search field has been filled using the form
rst.MoveFirst
For i = 0 To rst.Fields.Count - 1
    If Not IsNull(rst.Fields(i).Value) Then
        seachFieldName = rst.Fields(i).Name
        Exit For
    End If
Next

If Nz(seachFieldName, 0) <> 0 Then 'if data was found in one of the columns in temp table then create temporary QueryDef
    Set qdfTemp = dbs.CreateQueryDef("", _
        " SELECT Data.Name_, Data.ID, Data.RefNo, Data.Code" & _
        " FROM Temp INNER JOIN Data ON Temp." & seachFieldName & " = Data." & seachFieldName & ";")
    'Update the RecordSource for the lower subform to hold the results
    Me![Child1].Form.RecordSource = qdfTemp.SQL
End If

现在它应该像这样工作:enter image description here

我希望这会有所帮助!

评论

0赞 Kunal Purohit 11/15/2023
嘿 Mika O. 对不起,回复晚了。感谢您的帮助,您的回答在一定程度上帮助我解决了问题所在。