当前位置: 代码迷 >> VFP >> 请帮忙看一下这个循环解决方法
  详细解决方案

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

热度:8421   发布时间:2013-02-26 00:00:00.0
请帮忙看一下这个循环
小弟写了下面这段循环,主表先循环,每一笔数据有字段“大中小分类”,每个大中小分类又对应单独的表,其以属性名称作为字段,需获取之。之后将属性对应的值保存到表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 循环
  相关解决方案