搜索字符串中任何单词的记录集

时间:2018-03-30 11:11:08

标签: vba access-vba

我正在尝试使用instr()函数在记录集中搜索与给定字符串中的特定单词匹配的任何记录。我似乎无法正确地在记录集内移动,通常只有在记录集字段中的第一个或最后一个值时才得到结果。请原谅这个愚蠢的例子。下面,如果你在boxSentence中键入“我喜欢炸玉米饼”,boxPlace应该返回“Taco Bell”。这基本上就是我想要完成的。

Private Sub btnRecommend_Click()
dim db as database
set db = currentdb
dim rst as dao.recordset
set rst = db.openrecordset("Foods")

dim strsentence as string
me.boxsentence.setfocus
strsentence = me.boxsentence.text

rst.movefirst
do until rst.EOF
    if Instr(strsentence, rst("Food").value) then
        me.boxplace.value = dlookup("Place", "Foods", "ID =" & rst("ID").value)
    else
        me.boxplace.value = "Attempt Failed"
End If
rst.movenext
loop
rst.close 

1 个答案:

答案 0 :(得分:0)

问题在于,即使您的代码成功找到记录集中的记录,该记录验证了If语句的测试表达式,您仍然会迭代记录集的其余部分,因此您的值保留了boxplace控件将被下一条记录覆盖,该记录不会验证您的测试表达式。

避免这种情况的一种可能方法是在Do循环的测试表达式中包含一个变量,以便在找到匹配项时退出循环,例如:

Dim flg As Boolean
Do Until rst.EOF Or flg
    flg = InStr(strsentence, rst("Food").Value) > 0
    rst.MoveNext
Loop
If flg Then
    Me.boxplace.Value = DLookup("Place", "Foods", "ID =" & rst("ID").Value)
Else
    Me.boxplace.Value = "Attempt Failed"
End If