读书人

请帮忙看一下这个循环解决方法

发布时间: 2012-04-07 17:31:52 作者: rapoo

请帮忙看一下这个循环
小弟写了下面这段循环,主表先循环,每一笔数据有字段“大中小分类”,每个大中小分类又对应单独的表,其以属性名称作为字段,需获取之。之后将属性对应的值保存到表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

[解决办法]
你帖一下原表内容和想要结果内容
[解决办法]

探讨
表frome:
编码 大中小分类 名称 版本 属性1 属性2 属性3 属性4 属性5
701010001 70101 稳压二极管mmz02s A 1.2v 9083
701010002 70102 NPN三极管2N5459 B 3.4~4.1

大中小分类70101:
标准阻值 精度 额定功率 封装

表co10:
编码 版本 标准阻值 封装 温度系数 品牌 精度 系列号 电压 ……

[解决办法]
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 循环

读书人网 >VFP

热点推荐