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

问题描述 投票:0回答:1

我对 Access 相当陌生,所以如果这听起来是一个非常简单的问题,请原谅我。

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

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

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

我使用查询生成器为表单创建了一个查询。对于单个搜索元素,标准如下:(如“”和[Forms]![MyFormName]![MySearchText]和“”)。

我尝试同时修改多个搜索文本的查询,如下所示: [Field1] Like "" & [Forms]![MyFormName]![MySearchText] & "" AND [Field2] Like "" & [表单]![我的表单名称]![我的搜索文本] & "".
这似乎不起作用。此外,我的搜索文本包含多个字段。例如:姓名、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 forms ms-access ms-access-2010
1个回答
0
投票

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

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

现在像这样的查询会根据 ID 生成公共数据:

然后 SQL 看起来像这样

SELECT Data.Name_, Data.ID, Data.RefNo, Data.Code FROM Temp INNER JOIN Data ON Temp.ID = Data.ID;

然后在主窗体中有一个主窗体和两个子窗体:

然后是搜索按钮点击事件的代码:

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

现在它应该像这样工作:

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.