回 帖 发 新 帖 刷新版面

主题:求助,大侠们帮忙啊,急事

prodfile='pr'+alltr(thisform.text3.value)+'.dbf'

我现在就是想用上面这个来使用,
use &prodfile  in 0 shar
select 2
locate for allt(&prodfile.status)='PL'

但是有提示什么 DBFSTATUS不存在。


这是怎么回事啊 。。

回复列表 (共3个回复)

沙发

select 88
use (prodfile) shar
locate for allt(status)='PL'

板凳

一句一句看:
prodfile='pr'+alltr(thisform.text3.value)+'.dbf'
这是用变量prodfile保存一个表文件的名字,比如表单上的文本框text3里面输入一个"ABC",则该语句执行后,prodfile保存着"prABC.dbf"。

use &prodfile  in 0 shar
这句实际上就是 use prABC.dbf in 0 shar 在未被占用的最低编号的工作区以共享方式打开表文件prABC.dbf。 使用了宏替换&prodfile,没错。

select 2
这句有一定风险,如果上一句打开的表不在2号工作区,岂不是要产生故障?

locate for allt(&prodfile.status)='PL'
这句查找prABC.dbf表中status字段的值等于"PL"的记录,然而这个句子等同于
locate for allt(prABC.dbfstatus)='PL'
这样看来成了在表prABC中找字段dbfstatus的值等于"PL",当然没有dbfstatus字段。

为什么?问题在宏替换这里 &prodfile.status。
那个小点成了宏替换时字符变量名prodfile和其他字符的分隔符,它表明小点前和&之间是需要替换的变量名,所以替换后它结束使命消失了,于是 &prodfile.status的结果就是prodfile保存的字符串"prABC.dbf"后面直接跟上"status",即"prABC.dbfstatus"。
既然如此,你的确需要一个小点作为表名和字段的连接符,那么用两个小点,即:
&prodfile..status 对吗?还是不对,因为结果是"prABC.dbf.status"。
看来prodfile如果保存的是"prABC",那就对了。

直接给个程序段吧:
prodfile='pr'+alltr(thisform.text3.value)
use (prodfile)  in 0 shar
select (prodfile)
locate for allt(status)='PL'

3 楼

楼上精彩!

我来回复

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