我不知道这是否可行,但我正在尝试编写一个Access文本框,它将充当数据库的搜索引擎入口控件。具体来说,我想在表单中添加多个不可见的列表框,并让它们填充表或查询数据。当最终用户在文本框中输入搜索词并按下搜索时,我想编写一系列“if”语句,用于指定文本框中的条目是否与其中一个列表框中的值匹配,以执行自定义查询。例如:
if(Me.textbox.text =列表框中的值)然后 等...
问题在于,到目前为止我看到的每个示例仅通过数字或索引搜索列表框值,例如listbox.selected(0)。由于文本框采用字符串值而不是数值,因此代码必须将文本框条目与列表框中的项目等同。我已经能够在搜索文本框中添加一个数字,并以这种方式查找列表框项,但这是不切实际的,因为我的最终用户只会知道值。总之,我想知道是否有人知道如何以编程方式搜索列表框中的特定值,该值等于在文本框中输入的值。
谢谢,
DFM
答案 0 :(得分: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