Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 以编程方式搜索访问列表框控件';s基于文本框条目的项目_Ms Access_Textbox_Listbox_Equals - Fatal编程技术网

Ms access 以编程方式搜索访问列表框控件';s基于文本框条目的项目

Ms access 以编程方式搜索访问列表框控件';s基于文本框条目的项目,ms-access,textbox,listbox,equals,Ms Access,Textbox,Listbox,Equals,我不知道这是否可行,但我正在尝试编写一个Access文本框,作为数据库的搜索引擎入口控件。具体来说,我想向表单中添加多个不可见的列表框,并用表或查询数据填充它们。当最终用户在文本框中输入搜索词并按下搜索键时,我想写一系列“if”语句,指定文本框中的条目是否与其中一个列表框中的值匹配,以执行自定义查询。例如: Function CheckForItem(strItem, ListB As ListBox) As Boolean Dim rs As DAO.Recordset Dim db As D

我不知道这是否可行,但我正在尝试编写一个Access文本框,作为数据库的搜索引擎入口控件。具体来说,我想向表单中添加多个不可见的列表框,并用表或查询数据填充它们。当最终用户在文本框中输入搜索词并按下搜索键时,我想写一系列“if”语句,指定文本框中的条目是否与其中一个列表框中的值匹配,以执行自定义查询。例如:

Function CheckForItem(strItem, ListB As ListBox) As Boolean
Dim rs As DAO.Recordset
Dim db As Database
Dim tdf As TableDef

  Set db = CurrentDb

  CheckForItem = False

  Select Case ListB.RowSourceType
      Case "Value List"
          CheckForItem = InStr(ListB.RowSource, strItem) > 0

      Case "Table/Query"
          Set rs = db.OpenRecordset(ListB.RowSource)

          For i = 0 To rs.Fields.Count - 1
              strList = strList & " & "","" & " & rs.Fields(i).Name
          Next

          rs.FindFirst "Instr(" & Mid(strList, 10) & ",'" & strItem & "')>0"

          If Not rs.EOF Then CheckForItem = True

      Case "Field List"

          Set tdf = db.TableDefs(ListB.RowSource)

          For Each itm In tdf.Fields
              If itm.Name = strItem Then CheckForItem = True
          Next

  End Select

End Function
如果(Me.textbox.text=列表框中的值),则 等等

问题是,到目前为止,我看到的每个示例都只通过数字或索引搜索列表框值,例如listbox.selected(0)。由于textbox采用字符串值,而不是数字值,因此代码必须将textbox条目与listbox中的项目等同。我已经能够在搜索文本框中添加一个数字,并以这种方式查找列表框项目,但这是不切实际的,因为我的最终用户只知道值。总之,我想知道是否有人知道如何通过编程在列表框中搜索与文本框中输入的值相等的特定值

谢谢,


DFM有几种方法可以做到这一点,例如:

Function CheckForItem(strItem, ListB As ListBox) As Boolean
Dim rs As DAO.Recordset
Dim db As Database
Dim tdf As TableDef

  Set db = CurrentDb

  CheckForItem = False

  Select Case ListB.RowSourceType
      Case "Value List"
          CheckForItem = InStr(ListB.RowSource, strItem) > 0

      Case "Table/Query"
          Set rs = db.OpenRecordset(ListB.RowSource)

          For i = 0 To rs.Fields.Count - 1
              strList = strList & " & "","" & " & rs.Fields(i).Name
          Next

          rs.FindFirst "Instr(" & Mid(strList, 10) & ",'" & strItem & "')>0"

          If Not rs.EOF Then CheckForItem = True

      Case "Field List"

          Set tdf = db.TableDefs(ListB.RowSource)

          For Each itm In tdf.Fields
              If itm.Name = strItem Then CheckForItem = True
          Next

  End Select

End Function
发件人:

但是,我怀疑您可能从错误的方向处理问题,多个隐藏控件很少是一个好主意,最好更全面地解释您的需求

编辑重新评论

这个例子速度不快,但很简单

Sub SearchTables(strFind As String)
''Reference: Microsoft DAO x.x Object Library
Dim db As Database
Dim tdf As TableDef
Dim fld As DAO.Field
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strMessage As String

Set db = CurrentDb

For Each tdf In db.TableDefs

    strFieldList = ""

    For Each fld In tdf.Fields
        strFieldList = strFieldList & " & [" & fld.Name & "]"
    Next

    strSQL = "SELECT * FROM [" & tdf.Name & "] " _
    & "WHERE Instr(" & Mid(strFieldList, 4) & ",'" & strFind & "') > 0"

    Set rs = CurrentDb.OpenRecordset(strSQL)

    If Not rs.EOF Then
        rs.MoveLast '' Populate recordset, a little slower
        strMessage = strMessage & vbCrLf & tdf.Name & " : " & rs.RecordCount
    End If
Next

MsgBox "Found in - " & vbCrLf & IIf(strMessage = vbNullString, "None", strMessage)
End Sub

谢谢-我将尝试这个例子,看看它是否有效。我决定使用隐藏的列表框,因为我找不到一种方法来扫描表的每一列或查询特定的值。我的首选方法是让用户在文本框中输入一个值,按search,然后能够在表或查询中找到该值。我认为列表框将是一个很好的解决方案,因为它们将充当中介来识别值所在的列。这将允许我的代码构建一个自定义查询,其中where语句使用listbox值。如果表不是特别大,则可以连接字段并搜索字符串。我会在答覆中加上一个例子。