主题:求助,大侠们帮忙啊,急事
a2691858
[专家分:0] 发布于 2008-09-19 15:55:00
prodfile='pr'+alltr(thisform.text3.value)+'.dbf'
我现在就是想用上面这个来使用,
use &prodfile in 0 shar
select 2
locate for allt(&prodfile.status)='PL'
但是有提示什么 DBFSTATUS不存在。
这是怎么回事啊 。。
回复列表 (共3个回复)
沙发
cbl518 [专家分:57140] 发布于 2008-09-19 16:27:00
select 88
use (prodfile) shar
locate for allt(status)='PL'
板凳
Ilikefox [专家分:5770] 发布于 2008-09-19 17:00:00
一句一句看:
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 楼
LuckyLine [专家分:1940] 发布于 2008-09-19 17:28:00
楼上精彩!
我来回复