注册 登录
编程论坛 VFP论坛

求:select ... from 表 循环

yd1954 发布于 2022-05-24 09:06, 1017 次点击
各位老师好!
我想用for x=1 to 60
        SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_111 WHERE n2=N2b INTO TABLE sn1n2_111
   .......
    ........
 endfor
的方法,将下面n1n2_111--n1n2_170共60个select语句循环。
但没有查到from后面的表可以用变量表示的例子,也没查到into table后面的表可以用变量表示的例子。
不知道这个想法是否可行,如可行,请老师帮助写出程序。
如不行就得另想办法了。
还请各位老师指导帮助。
下面是select语句排列
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_111 WHERE n2=N2b INTO TABLE sn1n2_111
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_112 WHERE n2=N2b INTO TABLE sn1n2_112
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_113 WHERE n2=N2b INTO TABLE sn1n2_113
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_114 WHERE n2=N2b INTO TABLE sn1n2_114
...............
...............
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_166 WHERE n2=N2b INTO TABLE sn1n2_166
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_167 WHERE n2=N2b INTO TABLE sn1n2_167
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_168 WHERE n2=N2b INTO TABLE sn1n2_168
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_169 WHERE n2=N2b INTO TABLE sn1n2_169
SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_170 WHERE n2=N2b INTO TABLE sn1n2_170

谢谢各位老师!
9 回复
#2
hu9jj2022-05-24 09:55
可以试试用宏替换&,不过在调试时要先显示字符串变量是否符合要求,特别是组合以后会不会产生空格影响到宏替换。
#3
laowan0012022-05-24 10:47
for x=1 to 60
    xnum = transform(110+x)
    SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_&xnum WHERE n2=N2b INTO TABLE sn1n2_&xnum
endfor
#4
yd19542022-05-24 10:49
回复 2楼 hu9jj
感谢老师的指点。
我不懂“字符串变量”怎么体现,在那个位置体现。
“组合”是什么意思,谁和谁组合,怎么组合。
还请老师给与具体指导。
#5
hu9jj2022-05-24 12:34
以下是引用yd1954在2022-5-24 10:49:18的发言:

感谢老师的指点。
我不懂“字符串变量”怎么体现,在那个位置体现。
“组合”是什么意思,谁和谁组合,怎么组合。
还请老师给与具体指导。

3楼狐友已经给出了代码,按照这个代码应该不会错的。
宏替换是个非常不错的方法,熟练掌握后可以得到事半功倍的效果。
#6
yd19542022-05-25 08:31
回复 3楼 laowan001
非常感谢老师的帮助。
想问一下:
 xnum = transform(110+x)  “110+x”等同于 n=n+1 吗?
#7
laowan0012022-05-25 08:57
以下是引用yd1954在2022-5-25 08:31:30的发言:

非常感谢老师的帮助。
想问一下:
 xnum = transform(110+x)  “110+x”等同于 n=n+1 吗?


这个要结合程序来看
for x=1 to 60
    xnum = transform(110+x)    && xnum=111~170,并不是n=n+1,在for x=1 to 60循环中,其实每次x=x+1
    SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_&xnum WHERE n2=N2b INTO TABLE sn1n2_&xnum
endfor

上面程序与下面的结果一样
for x=111 to 170
    xnum = transform(x)
    SELECT h1,h2,h3,n2 FROM 3d999个数,n1n2_&xnum WHERE n2=N2b INTO TABLE sn1n2_&xnum
endfor
#8
yd19542022-05-25 09:08
回复 7楼 laowan001
非常感谢老师耐心的解答。
我是1954年出生,大学里又是学汉语的,理解计算机语言费劲。
再次感谢!
#9
hu9jj2022-05-25 09:26
以下是引用yd1954在2022-5-25 09:08:33的发言:

非常感谢老师耐心的解答。
我是1954年出生,大学里又是学汉语的,理解计算机语言费劲。
再次感谢!

原来也是一匹老马啊。我们同庚,但我没有您幸运,没能跨进大学门槛。
计算机语言的基础其实不复杂的,无非就是几类语句:赋值语句、循环语句、分支语句等,不同的语言表现形式不同而已。在您的事例中就是通过循环语句,将自增的变量依次赋值到字符串中,通过查询命令得到需要的结果,其中使用了宏替换的功能。

[此贴子已经被作者于2022-5-25 09:28编辑过]

#10
sam_jiang2022-05-26 21:20
以下是引用hu9jj在2022-5-25 09:26:55的发言:


原来也是一匹老马啊。我们同庚,但我没有您幸运,没能跨进大学门槛。
计算机语言的基础其实不复杂的,无非就是几类语句:赋值语句、循环语句、分支语句等,不同的语言表现形式不同而已。在您的事例中就是通过循环语句,将自增的变量依次赋值到字符串中,通过查询命令得到需要的结果,其中使用了宏替换的功能。


还有这么大的老哥在坚持学foxpro啊,可敬可佩!!! 计算机各种语言语法都大同小异,不同的是编译速度,编译方式,那些对学的人来说并不是很重要。不同语言的函数库不同,用的时候要查帮助文件了,融会贯通了之后,什么语言都会了(个人觉得foxpro最简单最实用,哈哈哈)。。。
1