提问人:Kunal Purohit 提问时间:11/6/2023 最后编辑:GustavKunal Purohit 更新时间:11/7/2023 访问量:54
使用 Microsoft Access 数据库中的表单同时搜索多个文本
Multiple Search Text at the same time using Forms in Microsoft Access Database
问:
我是 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
答:
1赞
Mika O.
11/7/2023
#1
如果您每次搜索只使用一个文本字段,那么我可能会这样做:
有两个表,原始表包含数据,然后是结构相同但包含一些条件的表。
现在,像这样的查询会根据 ID 生成通用数据:
那么 SQL 如下所示SELECT Data.Name_, Data.ID, Data.RefNo, Data.Code FROM Temp INNER JOIN Data ON Temp.ID = Data.ID;
然后是 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
我希望这会有所帮助!
评论
0赞
Kunal Purohit
11/15/2023
嘿 Mika O. 对不起,回复晚了。感谢您的帮助,您的回答在一定程度上帮助我解决了问题所在。
评论
[Field1] Like "*" & [...] & "*" OR [Field2] Like "*" & [...] & "*"