如何从locate获取记录数据?

时间:2017-02-01 12:47:12

标签: visual-foxpro

在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

当找不到名称但运行代码时,运行代码会正常运行。

谢谢!

1 个答案:

答案 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()
 ...