回 帖 发 新 帖 刷新版面

主题:请教CBL518老师:是不是EVALUATE()不可用于SQL中的SELE语句中?

记得07年学SQL时有一个东西不能用在SELE查询语句中,
是不是EVALUATE()?如果是那如何解决这个问题?


回复列表 (共5个回复)

沙发

老兄你好:

是不是 EVALUATE() 不能用在 SELE 查询语句中?

对 EVALUATE() 不能用在 SELE 查询语句中,当某个变量值用。

但是,它可以整句求值!

例:
zd1="字段名"

solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd)  && 可以运行


solcmd=zd1
sele EVALUATE(solcmd) from 表 && 不可以运行

板凳

如果是那如何解决这个问题?

1   整句邱值,这种方法,速度快,可靠性高。

zd1="字段名"

solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd)  && 可以运行


2 宏替换方法(老兄常用的方法吧):

zd1="字段名"

sele &zd1. from 表


3 楼

老兄要的是,这种调用格式吧?

zd1=EVALUATE(字段名)   && 用字段中的值作为语句的一部分。

solcmd="sele "+zd1+ " from 表"
EVALUATE(solcmd)  && 可以运行

4 楼

FOR II=1 TO 仓库管理级别_FL
  VV="SPSYB_FL_"+STR(II,1) &&商品索引表_分类_
  VV1=分类索引列名(II) &&栏目名
  VV2=VV1
  FOR JJ=1 TO II-1
    VV1=VV1+","+分类索引列名(JJ)
  NEXT JJ
  
  SELECT &VV1. ;
  FROM SPXZ_0HB ;
  WHERE NOT EMPT(EVAL(VV2))
  GROUP BY &VV1. ;
  INTO TABLE (VV)
  
  USE
  SELECT SPXZ_0HB
NEXT II

可以看出“WHERE NOT EMPT(EVAL(VV2))”中的VV2是随着II值变化的字段名,想取这个值不为空的记录。

5 楼

LOCAL cCmdExp
FOR II=1 TO 仓库管理级别_FL
  VV="SPSYB_FL_"+STR(II,1) &&商品索引表_分类_
  VV1=分类索引列名(II) &&栏目名
  VV2=VV1
  FOR JJ=1 TO II-1
    VV1=VV1+","+分类索引列名(JJ)
  NEXT JJ
  
  cCmdExp='SELECT '+VV1+ ' FROM SPXZ_0HB WHERE NOT EMPT('+EVAL(VV2);
         +') GROUP BY '+VV1+' INTO TABLE '+VV
  &cCmdExp.
  USE
  SELECT SPXZ_0HB
NEXT II

我来回复

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