在VFP 6中,我有一张名为" cars"在按钮内我想根据名称找到一个ID。我做错了什么?
... code
SELECT cars
LOCATE FOR ALLTRIM(UPPER(name)) = variable_read_from_textbox
IF NOT FOUND()
messagebox("not found")
ELSE
messagebox(cars.id_car)
ENDIF
当找不到名称但运行代码时,运行代码会正常运行。
谢谢!
答案 0 :(得分:4)
您的代码一般是正确的。对安全性进行轻微修改并修复错误:
SELECT cars
* this implies an exact match, regardless of set exact, and makes casing same
* remember this wouldn't use an index unless there is an index with the same signature
LOCATE FOR ALLTRIM(UPPER(name)) == ALLTRIM(UPPER(m.variable_read_from_textbox))
IF NOT FOUND()
messagebox("not found")
ELSE
messagebox(transform(cars.id_car))
ENDIF
据我记忆,在VFP6中,messagebox()还没有能力将值转换为字符串并且需要一个字符串(你没有告诉错误是什么,但应该是这样)。 / p>
对您的搜索有点谨慎。
ALLTRIM(UPPER(name))
除非有一个带有键" ALLTRIM(UPPER(名称))"的索引,否则不会使用索引。如果存在,它将被使用,但由于alltrim(),这样的索引实际上是无用的。更好的指数就是:
Upper(name)
然后你的搜索结果如下:
variable_read_from_textbox = ALLTRIM(UPPER(m.variable_read_from_textbox))
SET EXACT ON
SELECT cars
LOCATE FOR UPPER(name) = m.variable_read_from_textbox
IF NOT FOUND()
...