如何从定位中获取记录数据?

How to get record data from locate?

在 VFP 6 中,我有一个名为 "cars" 的 table,在一个按钮内,我想根据名称查找 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

运行 找不到名称时代码工作正常,但找到时出错。

谢谢!

您的代码大体上是正确的。为安全稍作修改并修复错误:

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() 还不能为您将值转换为字符串并需要一个字符串(您没有说明错误是什么,但应该是错误)。

搜索时请注意一点。

ALLTRIM(UPPER(name))

不会使用索引,除非有一个带有键 "ALLTRIM(UPPER(name))" 的索引。如果有,它就会被使用,但是这样的索引实际上是没有用的,因为 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()
 ...