小弟写了下面这段循环,主表先循环,每一笔数据有字段“大中小分类”,每个大中小分类又对应单独的表,其以属性名称作为字段,需获取之。之后将属性对应的值保存到表co10中。请帮小弟看一下,问题是:不能获取字段名称。
select frome
go top
do while not eof()
scode=编码
sbb =版本
msfl=大中小分类
msx1=属性1
msx2=属性2
msx3=属性3
msx4=属性4
msx5=属性5
If File(&msfl)=.T.
If !Used(&msfl)
Use &msfl In 0
Endif
Select &msfl
Else
Messagebox('表&msfl缺失',16,'提示')
Return
Endif
Select &msfl
mnumber = Fcount()
For ncount =1 to mnumber
mfild=Field(ncount)
if ncount=1
mvalu=msx1
endif
if ncount=2
mvalu=msx2
endif
if ncount=3
mvalu=msx3
endif
if ncount=4
mvalu=msx4
endif
if ncount=5
mvalu=msx5
endif
if !empty(alltrim(tran(mvalu)))
select co10
repl co10.&mfild with mvalu for alltrim(tran(编码))=scode and alltrim(tran(版本))=sbb
endif
EndFor
skip
enddo
------解决方案--------------------------------------------------------
你帖一下原表内容和想要结果内容
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
if !empty(alltrim(tran(mvalu)))
select co10 //此处你转换至别的表了
repl co10.&mfild with mvalu for alltrim(tran(编码))=scode and alltrim(tran(版本))=sbb
endif
EndFor
//此处没有转换回来的语句
select frome
skip
enddo
------解决方案--------------------------------------------------------
眼睛都看花了
------解决方案--------------------------------------------------------
if !empty(alltrim(tran(mvalu)))
select co10 && 注意:此时已经离开了 frome 工作区,所以若使用 frome 的字段需声明工作区
repl co10.&mfild with mvalu for alltrim(tran(frome.编码))=scode and alltrim(tran(frome.版本))=sbb
endif
或写作
if !empty(alltrim(tran(mvalu)))
repl co10.&mfild with mvalu for alltrim(tran(frome.编码))=scode and alltrim(tran(frome.版本))=sbb
endif
对于第一种写法,在 skip 前还需回到 frome 工作区
select frome
skip
通常使用 scan 循环要优于 do while 循环