回 帖 发 新 帖 刷新版面

主题:[请教] EVALUATE()在SELE查询语句中为什么出问题?

请看下面两个实例:

1、错误
  FOR II=1 TO FCOU("操作表名")
    VV="LSB_"+ALLTRIM(STR(II))
    SELE 操作表名
    VVV=FIEL(II)
    SELECT &VVV. FROM 操作表名 WHERE NOT EMPTY(EVALUATE(VVV)) ;
    GROUP BY &VVV INTO TABLE (VV)
    USE
  NEXT II


2、改为下式后正确
  FOR II=1 TO FCOU("操作表名")
    VV="LSB_"+ALLTRIM(STR(II))
    SELE 操作表名
    VVV=FIEL(II)
    COPY TO LSB_JH FOR NOT EMPTY(EVALUATE(VVV))
    SELECT &VVV. FROM LSB_JH GROUP BY &VVV INTO TABLE (VV)
    USE
    USE IN LSB_JH
  NEXT II

看来问题出在EVALUATE()上,但觉得不应该,百思不得其解,敬请高师指教。

回复列表 (共17个回复)

11 楼

是吗?
那好,我也试一试,一会向你汇报结果。

12 楼

1楼说得对,2楼用错了,改一句即可:

SELECT &VVV. FROM 操作表名 WHERE NOT EMPTY(&VVV.) ;
    GROUP BY &VVV INTO TABLE (VV)

13 楼

各位兄弟好:
    经过测试,12楼的写法正确,一点问题没有。看似语法有问题,过去没敢这么写。
    8楼的写法运行不通,我这里也是VFP9.0。
    多谢各位高师相助,特别是感谢Ilikefox老师,在下这边有礼了!

14 楼

看样子,你没有理解函数之间的区别:

empty( ) 是测试变量是否为空值,如空的字符串,或单纯一串空格,或数值为0

当VVV的值是"1-1","0"时,会有不同的结果,
当然,视乎你字段的取值范围而选用,
不可能有运算符的出现,那就没有必要使用 eval( ) 了.
帮助文档说的是可能有问题,没有必要,还是不要去验证别人的结论为好.

15 楼

[quote]1楼说得对,2楼用错了,改一句即可:

SELECT &VVV. FROM 操作表名 WHERE NOT EMPTY(&VVV.) ;
    GROUP BY &VVV INTO TABLE (VV)[/quote]
看似不合理,
运行没问题,
湖北赵老弟,
再次感谢你。

16 楼

17 楼

过来学习

我来回复

您尚未登录,请登录后再回复。点此登录或注册