0

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

if (Me.textbox.text = 列表框中的一个值) then etc ...

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

谢谢,

DFM

4

1 回答 1

0

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

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

来自:http ://wiki.lessthandot.com/index.php/Listbox:_Does_an_Item_Exist

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

编辑重新评论

这个例子并不快,但很容易。

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
于 2009-05-17T14:35:32.673 回答