【问题标题】:Search recordset for any word inside a string在记录集中搜索字符串中的任何单词
【发布时间】:2018-03-30 11:11:07
【问题描述】:

我正在尝试使用 instr() 函数在记录集中搜索与给定字符串中的特定单词匹配的任何记录。我似乎无法在记录集中正确移动,通常只有当它是记录集字段中的第一个或最后一个值时才会得到结果。原谅这个愚蠢的例子。下面,如果你在 boxSentence 中输入“我喜欢 tacos”,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 

【问题讨论】:

  • 似乎在记录集的基础上形成正确的SQL语句会更有效率。

标签: ms-access vba


【解决方案1】:

问题在于,即使您的代码成功地在记录集中找到了一条记录,该记录验证了您的 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

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2016-11-25
    • 2011-12-27
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多