超低级问题

hnman2000 2004-11-09 01:45:40
各位,小弟不懂VFP 但因工作的需要,得弄清下面的代码. 能告诉我吗
SET DEFA TO C:\MYDOCU

SET TALK OFF
SET STAT ON
SET SAFE ON
SET EXACT OFF

USE C:\MYDOCU\MFFQ3
MODI STRU

GO TOP

USE C:\MYDOCU\FFALLQ4A IN 0
DO WHILE RECNO()<41642
IF BOUND='S'
SELE 1
X=SUBSTR(UPPER(CONTROL),1,20)
SELE 2
LOCATE FOR X=ALLTRIM(SUBSTR(UPPER(ACCOUNT),1,20))
ENDIF
IF FOUND()=.T.
SELE 2
Y=FF
SELE 1
REPLACE FF WITH Y

ENDIF
SELE 1
SKIP
ENDDO

CLOS ALL
...全文
94 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyeng 2004-11-12
  • 打赏
  • 举报
回复
dfwxj(清风) ( ) 信誉:46
说的很对,但不知为什么信誉那么低。
是不是天什么。。。。英才啊!
我的msn:USAadmin@hotmail.com
望做个朋友!
sdmfc 2004-11-11
  • 打赏
  • 举报
回复
yyyyyyyy
dfwxj 2004-11-10
  • 打赏
  • 举报
回复
就代码本身来讲,这段代码没有语法错误;

作为一段程序来讲,这段代码错误百出,无法完成某种需求

SET DEFA TO C:\MYDOCU &&环境设置

SET TALK OFF
SET STAT ON
SET SAFE ON
SET EXACT OFF

USE C:\MYDOCU\MFFQ3 &&打开表
MODI STRU &&修改表结构,在此不知道会将此表改成什么样的结构

GO TOP &&记录指针指向表头

USE C:\MYDOCU\FFALLQ4A IN 0 &&在最近一个未使用工作区打开一个表,注意:该工作区暂未知,不一定就是2号工作区
DO WHILE RECNO()<41642 &&开始循环
IF BOUND='S' &&判断字段“BOUND”是否为“S”,如果刚才在修改表结构时没有保留该字段,就会发生错误
SELE 1 &&选择1号工作区,也不知道该区打开的是哪个表
X=SUBSTR(UPPER(CONTROL),1,20) &&为变量X赋值
SELE 2 &&选择2号工作区,也不知道该区打开的是哪个表
LOCATE FOR X=ALLTRIM(SUBSTR(UPPER(ACCOUNT),1,20)) &&查找
ENDIF
IF FOUND()=.T. &&如果找到符合条件的记录,将1号工作区的表的FF字段用2号工作区的表的FF字段替换
SELE 2
Y=FF
SELE 1
REPLACE FF WITH Y

ENDIF
SELE 1
SKIP
ENDDO

CLOS ALL

这段代码的错误其实很简单,没搞清工作区而已,建议在写程序时少用工作区,用别名进行引用

这段代码的用意是:将MFFQ3表的前41641条记录,如果“BOUND”字段为“S”,则在FALLQ4A表中查找ACCOUNT字段与该表的CONTROL字段的前20个字符大写相同的,用FALLQ4A的FF字段替换MFFQ3表的FF字段。

不过在循环中出现了一个逻辑错误,将LOCA语句放在条件语句中:

1、如果第一条记录的“BOUND”字段不为“S”,那会导致“IF FOUND()=.T.”出错

2、如果遇到一条记录的“BOUND”字段为“S”,那接着的“BOUND”字段不是“S”记录都视同合符条件,因为不再进行LOCA操作
hnman2000 2004-11-09
  • 打赏
  • 举报
回复
整段语句的流程
xclzteb 2004-11-09
  • 打赏
  • 举报
回复
到VFP的QQ群6327467去问吧,不懂你的要求是什么,就上面的语法而言比较简单,不知道你要了解哪方面的。

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧