Select()函数?命令?

Ilikefox 2011-06-09 01:42:52
多表操作时,经常在某一步骤执行时,先记录当前工作区,然后转入其它工作区操作,完成后再返回开始的工作区。

一般可以如下方式进行

lnWorkArea = select()
* 转到另外工作区进行操作
* ......
select(lnWorkArea) &&返回之前的工作区
* 继续


俺经常这样用,一切OK。不过一直有个问题,select()到底是函数还是命令?

特别是这句select(lnWorkArea)!
若它是函数,则根据select()函数的说明,函数返回工作区号,不会改变当前工作区。
因此原则上select(lnWorkArea)并不能使工作区恢复到原先的工作区。

那么它就应该是命令,根据select命令的说明,我应该用select lnWorkArea,错误!系统会认为“lnWorkArea”是某个工作区别名。那就改为select (lnWorkArea),用名表达式替换,还是错误!呵呵。

只有连起来写select(lnWorkArea),外观看起来像个函数形式才行。

哪位给点解释,谢谢。
...全文
171 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxjdzwang5555 2011-06-10
  • 打赏
  • 举报
回复
楼主精益求精的精神值得学习!
vfp之所以成为vfp,探求则不可尽也。vfp产生的原理,高级语言、汇编、cpu指令以及以后的发展等。变化莫测也。
个人认为开源是vfp最好的发展途径。
aabiao 2011-06-10
  • 打赏
  • 举报
回复
select (lnWorkArea) 是命令(Select后面要跟一个空格),此时的括弧叫做名称表达式,功能类似与宏,是取括弧里的内容作为工作区名,切换到这个工作区。若没括弧,就把lnWorkArea当成工作区名了;
Select()是函数(Select后面没空格),是返回当前工作区的名称。
同一个单词,既是函数、又有命令,很正常。
十豆三 2011-06-10
  • 打赏
  • 举报
回复
m=9
SELECT(m)
确实选择了9号工作区,VFP 把 (m) 当成名称表达式了,
实际内部为 SELECT9,但你如果直接这样select9,系统会报错的,名称表达式容错了?
但像你所说的,
SELECT(m)

?SELECT(m)
还不一样。

的确很有意思
Ilikefox 2011-06-09
  • 打赏
  • 举报
回复
To apple_8180:

谢谢,Help我经常看,这句
A work area can be selected (activated) with SELECT.
应该是指用SELECT命令可以选择(激活)工作区,那就是用SELECT()函数不能选择,事实也是如此。
根据语法,该函数参数只能是0或1(整数),或者工作区别名(字符型),不管怎样仅仅返回工作区号,没有选择工作区的能力。

比如你不能SELECT(9)来选择9号工作区,因为不是规定的参数。

但是你的确可以
m=9
SELECT(m)
这个SELECT(m)就是能选择9号工作区。

这样看来,这里的SELECT(m)好像是SELECT命令,但是它又不符合SELECT命令的语法,至少命令动词和后面的东东应该有空格隔开,问题是你又不能按SELECT命令的语法写成 SELECT m 或者 SELECT (m),这就让人迷惑鸟。

另外,其实更多的场合我用工作区别名,别名很好,不用关心几号几号,正如你在2楼所言。
或许这是老狐狸的神秘之处吧!

To wwwwb:

谢谢回复,我倾向于认为这里的SELECT(m)是SELECT命令,或许一种特殊形式的命令。
可以启动VFP,在命令窗口试试:

?SELECT() &&返回1,这个不用说了
m=9
?SELECT(m) &&返回0,这个的确是函数
?SELECT() &&测试当前工作区号,返回1
?SELECT(9) &&返回0,这个仍然是函数,和?SELECT(m)一样都用了非法参数
?SELECT() &&测试当前工作区号,还是返回1
SELECT(9) &&出错,提示命令缺少子句
SELECT(m) &&神秘的东东,执行正确
?SELECT() &&测试当前工作区号,返回9


wwwwb 2011-06-09
  • 打赏
  • 举报
回复
SELECT( )是 函数
十豆三 2011-06-09
  • 打赏
  • 举报
回复
我一般这样用
每次打开表是
Use 表名 In 0

因为不同工作区打开的表名不同,所以需要用到某个工作区的表时
Select 具体表名
十豆三 2011-06-09
  • 打赏
  • 举报
回复
来自 VFP 自带的帮助文件:

SELECT( ) 函数

返回当前工作区编号或未使用工作区的最大编号。


SELECT([ 0 | 1 | cTableAlias ])


参数
0 指定 SELECT ( ) 返回当前工作区的编号。
1 指定 SELECT( ) 返回未使用工作区的最大编号。
cTableAlias 指定表别名,SELECT( ) 返回其所在工作区编号。

说明
如果 SET COMPATIBLE 设置为 OFF,则 SELECT( ) 返回当前工作区的编号。如果 SET COMPATIBLE 设置为 ON,SELECT( ) 返回未用工作区中编号最大的工作区。

使用 SELECT 可以选择 (激活) 工作区。

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧