关于数据工作区的使用
很多初学VFP的朋友在程序中经常出现“找不到别名'***'”、“文件正在使用”、“当前工作区没有打开的表”等等出错的提示,之所以会出现此类问题,主要是没有正确使用好工作区。目前的教材上对工作区的介绍还停留在forBASE阶段,通常是select 1 &&选择第一个工作区
use 表1 &&打开第一个表
select 2 &&选择第二个工作区
use 表2 &&打开第二个表
......
使用时
select 1
......
select 2
......
这样的做法需要编程者牢记在哪个工作区打开了哪个表,记错了程序自然就会出错。
稍微进步一点的教材会介绍更先进一点的打开最小编号空闲工作区的命令,如:
select 0
以及通过表别名来选择工作区的命令,如:
use 表2
这样就可以不必记住具体在哪个工作区打开了哪个表,用表别名就可以方便快捷地选择到相应的工作区。
这样就能满足我们的编程需要了么?答案是否定的,举例来说,有一个名称为abc的表,我们在一个表单里需要使用这个表,很自然地在表单的开始时(例如init事件中)使用一行use abc in 0,然后在表单结束时(例如unload事件中)写上二行语句
select abc
use
这看起来很正常,教材中是这么写的,老师也许也是这样教的,上机测试也正常通过的。但实际使用起来就可能会有问题,例如我们在其他表单上也使用这个表,也用相同的方法打开和关闭表,两个表单分别运行进没有问题的,但如果前一个表单尚未关闭,启动第二个表单时,由于表不能被同时打开,于是自然就出错了。允许表单有多个实例(也就是可以多次打开同一表单)也会涉及到这个问题。
也许有熟悉VFP语句的朋友会说这很容易解决,在表单打开用一个检测命令就行,如:
if used("abc") &&abc表已经被打开了
select abc
else
use abc in 0
endif
这的确可以解决表被重复打开的问题,确保表只能打开一次,不会被重复打开,因此也不会出这个方面的错误。