注册 登录
编程论坛 VFP论坛

请指导 update 不用宏,可以吗?

schtg 发布于 2023-05-23 19:18, 1380 次点击
各位大侠,使用update更新记录时,set变量时,不用宏,行吗?
如:
for xks = 1 to 3
    xkm = substr([aa,ab,ac,ad],3*m.xks-2,2)
    xkdj = alltrim(xkm) + [dj]
    xkff = alltrim(xkm) + [ff]
    update _result SET &xkff =  ……   && 此处 &xkff ,不用宏,可以吗?
endfor
17 回复
#2
sdta2023-05-23 19:37
不行
用()试试
#3
schtg2023-05-23 19:38
回复 2楼 sdta
好的,谢谢!试一下哈。
#4
吹水佬2023-05-23 19:49
EXECSCRIPT( )
#5
schtg2023-05-23 19:50
回复 4楼 吹水佬
我试了用()不行,再试一试哈,谢谢!
#6
schtg2023-05-23 19:55
回复 4楼 吹水佬
还是报错:invalid use of a function as an array。
应该与操作系统无关吧,我的win7 64位。
#7
schtg2023-05-23 19:59
回复 6楼 schtg
我用 evaluate()试了,也不行的,无解?
#8
吹水佬2023-05-23 20:08
回复 6楼 schtg
用EXECSCRIPT( )应该无问题,是不是命令语句本身就有问题。
#9
schtg2023-05-23 20:11
回复 8楼 吹水佬
我再看一看,谢谢!
#10
吹水佬2023-05-23 20:28
模拟示例
只有本站会员才能查看附件,请 登录

程序代码:
CREATE CURSOR _result (aaff I, abff I, acff I)
APPEND BLANK
for xks = 0 to 2
    cmd = "UPDATE _result SET " + substr([aa,ab,ac,ad],3*xks+1,2) + "ff=" + TRANSFORM(xks)
    EXECSCRIPT(cmd)
endfor
SELECT * FROM _result

#11
schtg2023-05-23 20:29
回复 10楼 吹水佬
谢谢!我使用错误哈,哈哈^_^
#12
吹水佬2023-05-23 20:35
程序代码:
CREATE CURSOR _result (aaff I, abff I, acff I)
APPEND BLANK
cmd = ""
for xks = 0 to 2
    cmd = cmd + "," + substr([aa,ab,ac,ad],3*xks+1,2) + "ff=" + TRANSFORM(xks)
ENDFOR
cmd = "UPDATE _result SET " + SUBSTR(cmd,2)
EXECSCRIPT(cmd)
SELECT * FROM _result
#13
schtg2023-05-24 05:52
回复 12楼 吹水佬
谢谢吹版!
#14
laowan0012023-05-24 07:56
回复 楼主 schtg
好奇的问下楼主,为什么要不用宏?
#15
schtg2023-05-24 10:36
回复 14楼 laowan001
因在使用宏的过程中,出现过不可控、无法预知的结果,尽管次数很少,但是无奈,所以就尽可能不用啦。
#16
laowan0012023-05-24 10:51
以下是引用schtg在2023-5-24 10:36:40的发言:

因在使用宏的过程中,出现过不可控、无法预知的结果,尽管次数很少,但是无奈,所以就尽可能不用啦。


可以理解
个人以为,VFP的宏是个非常好的设计,让程序有很强的灵活性,虽然有时会有不可控的情况,但终归是级少数,可以有选择的使用
楼上提出了一些解决方案,感觉最终还是宏的变种方法,是否真能解决“不可控、无法预知”的问题,还有待商榷,因为只要不是确定的字段名或命令,都需要拼出语句来执行,其根本还是宏
#17
schtg2023-05-24 11:10
回复 16楼 laowan001
你说的很对,只是我对宏控制不好,所以我个人尽可能少用。
#18
吹水佬2023-05-24 11:33
&宏替换和EXECSCRIPT()都可以动态执行命令语句。
但EXECSCRIPT()不只有动态语句功能,还具有动态函数功能,可以一次动态执行一组命令语句,可使用参数和返回值。
都要注意的是,动态语句的正确性和可靠性,尤其是对字符串中的空格和逗号要控制好。因VFP语句中空格和逗号有特殊意义的,搞错了有可能会出现语句非法或结果不对。
1