回 帖 发 新 帖 刷新版面

主题:工作区别名

大家好,请教个问题:
VFP的工作区编号是1-32767,前十个工作区编号可用别名A-j表示,后面的工作区很多教材上说:从W11-W32767
但事实上却不行,不加w可以,加上w就不行。如select  11   可以
select  w11  却不行,难道很多教材都错了吗?

回复列表 (共1个回复)

沙发

啊哈!这个问题实在难回答。很多教材都错了吗?错了,可是......也没错。

很矛盾的回答,不是吗?

Ilikefox自告奋勇解答这个“难题”,呵呵。

先说“没错”,因为教材是抄了帮助的原话:
The default aliases that Visual FoxPro assigns in the first 10 work areas are the work area letters "A" through "J". The aliases assigned in work areas 11 through 32,767 are W11 through W32767. You can use these default aliases to refer to a table open in a work area in the same way as any other default or user-defined alias. 
翻译过来即:
Visual FoxPro 指派给前10个工作区的默认别名是工作区字母“A”到“J”。指派给11到 32,767工作区的别名是W11到W32767。可以用与任何其他默认或自定义别名同样的方式使用这些默认别名引用工作区中打开的表。

帮助的说法会有错吗?当然会,整篇帮助文字这么多,难免出错,但你要相信这里面出错的地方其实很少,至少这里对工作区别名的说明其实就没有错。老狐狸的确就是这样干的。

那为什么又说“错了”?因为你从实践中发现
select B &&没问题
select H &&也没问题
select W11 &&出错,找不到别名W11

立刻晕菜,疑问接踵而至,是不是教材错了?是不是帮助错了?是Bug吧?

俺已经说过帮助没错,那么当然也不是Bug。教材呢?嘿嘿,有点问题。

不买关子了,挑明了说:
帮助告诉我们VFP的1到10工作区默认别名是A到J,并没有说11到32,767工作区有默认别名,只是说指派的别名是W11到W32767。这说法就大有不同,默认是指不管37二十1,只要启动VFP,前10个工作区的别名就已经有了,(注意后面这句)“但是从11工作区开始,当你用到它们并且请老狐狸来给个别名时,它才会指派W11、W12......等等名称。”

看例子:

启动VFP,我们假设有个表table1.dbf,先打开数据工作区窗口(为了方便看到各区别名),然后命令窗口输入:
select I &&没问题,选择9号工作区,不管你用不用这个工作区,别名是现成的。
select W11 &&出错,找不到别名W11,因为你没用这个工作区
USE table1 in 11  使用11工作区,打开表
select W11 &&出错,找不到别名W11,尽管你用了这个工作区,但USE命令指派它的别名是table1
USE in 11  &&关闭表,为下面试验做准备
再看:
USE table1 in 2 alias W11
select W11 &&命令没错,但是这个W11是你指派的,实际上是2号工作区
USE in 2  &&关闭表,为下面试验做准备

看来我们需要想办法既用到11工作区,又能请老狐狸给指派别名,好办,输入下面命令,全选中回车:
use table1 in 1
use table1 again in 11

哈哈,看数据工作区窗口,W11出现了。(这个例子仅作为达到目的而写的,实际上是把同一个表在两个工作区打开,第2个USE原本要在11工作区指派别名table1,但1号工作区已经被上一个USE指派了table1的名称,不能再用,于是老狐狸来指派别名W11)

现在理解帮助的说法了吧!

教材翻译过来,囫囵吞枣,也不进一步解释,往往让人理解上出现歧义。

我来回复

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