Ms access 以编程方式搜索访问列表框控件';s基于文本框条目的项目
我不知道这是否可行,但我正在尝试编写一个Access文本框,作为数据库的搜索引擎入口控件。具体来说,我想向表单中添加多个不可见的列表框,并用表或查询数据填充它们。当最终用户在文本框中输入搜索词并按下搜索键时,我想写一系列“if”语句,指定文本框中的条目是否与其中一个列表框中的值匹配,以执行自定义查询。例如: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
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值。如果表不是特别大,则可以连接字段并搜索字符串。我会在答覆中加上一个例子。