首页 文章

如何从locate获取记录数据?

提问于
浏览
0

在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 回答

  • 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()还没有能力将值转换为字符串并期望一个字符串(你没有告诉错误是什么,但应该是这样) .

    关于你的搜索有点谨慎 .

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

相关问题