我正在尝试使用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
答案 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