注册 登录
编程论坛 VFP论坛

VFP 程序设计_查询语句_宏代换应用_标红的行错误在哪儿了,提示:命令中含有不能识别的短语或关键字

Heris_Lau 发布于 2023-10-16 17:20, 654 次点击
程序代码:
SELECT DISTINCT YM FROM temp INTO CURSOR YM
DECLARE A(reccount(),fcount())
DECLARE B(reccount(),fcount())
sele YM
INDEX on YM to aa
COPY TO ARRAY A
FOR i=1 TO RECCOUNT()*FCOUNT()
  B(i)='Q'+A(i)
ENDFOR

DISPLAY MEMORY LIKE A*
DISPLAY MEMORY LIKE B*

SELECT DISTINCT bjh, dpt FROM temp GROUP BY bjh,dpt INTO CURSOR zidiso_0
k=0
FOR j=1 TO 1
  X=('zidiso_0_a'+ALLTRIM(str(j,1)))
  SELECT DISTINCT bjh, dpt,qty FROM temp WHERE YM==A(j) INTO CURSOR &x
  y=('zidiso_'+STR(k,1))
  SELECT (&y).*,(&x).qty as (B(j)) FROM (&y) LEFT JOIN (&x) ON (&y).BJH=(&x).bjh AND (&y).dpt=(&x).dpt INTO CURSOR ('zidiso_'+STR((k+1),1))  &&错误行,错在哪儿了
  k=k+1
ENDFOR
COPY TO zidiso_6



[此贴子已经被作者于2023-10-16 17:26编辑过]

10 回复
#2
Heris_Lau2023-10-16 17:21
VFP提示:下边这句有错误,提示:命令中含有不能识别的短语或关键字,但是不知道错在哪儿了?请大神指点
SELECT (&y).*,(&x).qty as (B(j)) FROM (&y) LEFT JOIN (&x) ON (&y).BJH=(&x).bjh AND (&y).dpt=(&x).dpt INTO CURSOR ('zidiso_'+STR((k+1),1))  
#3
gs25367856782023-10-16 17:27
个人见解如下:
【SELECT DISTINCT YM FROM temp INTO CURSOR YM】
你前后两个YM不知何为哉?好像不妥。
下面还有这么多,你使用变量太【节约】了。
【B(i)='Q'+A(i)】
这里的应当用allt(A(i))
其他你自己琢磨吧。
#4
Heris_Lau2023-10-16 17:34
纠正一下哈,FOR j=1 TO 1 更改为 FOR j=1 TO Alen(B);错误仅存在下边这一行,其它的都能执行过去
SELECT (&y).*,(&x).qty as (B(j)) FROM (&y) LEFT JOIN (&x) ON (&y).BJH=(&x).bjh AND (&y).dpt=(&x).dpt INTO CURSOR ('zidiso_'+STR((k+1),1))  
#5
Heris_Lau2023-10-16 17:35
回复 3楼 gs2536785678
这是个人为了区分生成临时表的内容,因为只有一个字段YM,所以也把临时表命名为了YM
#6
laowan0012023-10-16 22:10
SELECT (&y).*,(&x).qty as (B(j))
这里的 (&y)和(&x)等于用了两次宏,去掉括号试试吧
#7
schtg2023-10-17 06:59
回复 楼主 Heris_Lau
若是仅测试宏运行效果,就需要单步操作;若是希望得到某个结果,可以直接上图,原表结构图、希望得到结果图,也许有其他更好的方案。
建议修改如下,但不知道是不是希望的结果
程序代码:
select distinct ym from temp into cursor ym
declare a(reccount(),fcount())
declare b(reccount(),fcount())
sele ym
index on ym to aa
copy to array a
zjls = reccount()*fcount()          && === 修改
for i=1 to zjls                     && === 修改
  b(i) = 'q' + alltrim(a(i))        && === 修改
endfor

display memory like a*
display memory like b*

select distinct bjh, dpt from temp group by bjh,dpt into cursor zidiso_0

k=0
for j = 1 to 1
    x= 'zidiso_0_a' + alltrim(str(j,1))    && === 修改
    select distinct bjh, dpt,qty from temp where alltrim(ym)==alltrim(a(j)) into cursor &x    && === 修改
    y = 'zidiso_'+alltrim(str(k,1))           && === 修改
    bc = 'b' + alltrim(str(j,1))              && === 修改
    bm = 'zidiso_'+ alltrim(str((k+1),1))     && === 修改
    select &y..*,&x..qty as &bc  from &y left join &x on alltrim(&y..bjh) == alltrim(&x..bjh) and alltrim(&y..dpt) == alltrim(&x..dpt) into cursor &bm    && === 修改
endfor
copy to zidiso_6





[此贴子已经被作者于2023-10-17 07:29编辑过]

#8
hu9jj2023-10-17 08:28
逐个检查宏替换的内容,应该可以发现问题。
#9
sdta2023-10-17 10:40
上表
临时表TEMP那来的
#10
Heris_Lau2023-10-18 11:19
回复 7楼 schtg
感谢大神,你的是对的,我的错误在于少了一个".",改成两个".."就对了

  SELECT &y1..*,&X..qty as &Z FROM &y1 LEFT JOIN &X ON &y1..BJH=&X..bjh AND &y1..dpt=&X..dpt INTO CURSOR &y2
#11
csyx2023-10-18 13:45
最好按标准来写,源表使用别名,这样可以简化命令行,越简单越不容易打错字

SELECT A.*, B.qty as (B(j)) FROM &y A LEFT JOIN &x B ON A.bjh = B.bjh AND A.dpt = B.dpt INTO CURSOR ...

[此贴子已经被作者于2023-10-18 18:59编辑过]

1