【问题标题】:How to get record data from locate?如何从定位中获取记录数据?
【发布时间】:2017-02-01 12:47:11
【问题描述】:

在 VFP 6 中,我有一个名为“汽车”的表格,在一个按钮内,我想根据名称查找 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

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

谢谢!

【问题讨论】:

    标签: visual-foxpro


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢! “转换”修复了它。谢谢你的其他提示,我不是真正的 VFP 开发人员,只是想帮助朋友做一个商业课程的项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多