标题:求助!如何对多条记录有用
只看楼主
qingxinwufua
Rank: 2
等 级:论坛游民
帖 子:21
专家分:48
注 册:2011-9-6
得分:0 
close all
clear
use 2.dbf
if 成绩>90
  replace all 等级 with '优秀'
  else
  if 成绩>70
    replace all 等级 with '合格'
    else
    if 成绩<=60
      replace all 等级 with '差'
    endif
  endif
endif
list
2011-09-15 08:59
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
单就个例而言 同意楼上这位的语法 添加一个ALL就解决问题
2011-09-15 12:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 12楼 寻H不得
你说你的楼上能达到目的?

授人以渔,不授人以鱼。
2011-09-15 13:23
寻H不得
Rank: 4
等 级:业余侠客
威 望:1
帖 子:181
专家分:222
注 册:2010-10-9
得分:0 
回复 13楼 TonyDeng
呵不好意思没细看楼上这位的语句 只针对楼主要求而言 最为简单的是添加 all选择
但语句嘛应当是
close all
clear
use 2.dbf
  replace all 等级 with '优秀' for 成绩=>90
  replace all 等级 with '合格' for 成绩=>70 and 成绩<90
  replace all 等级 with '差' for 成绩<=60  &&61-70之间楼主没评级
list
按楼上的确不妥(replace之前先进行判断 这个判断的依据仅当前的一条记录)
呵 抱歉

TonyDeng 先生的程序对于VFP编程中学会举一反三应用大有好处 高手 偶获益颇多


[ 本帖最后由 寻H不得 于 2011-9-15 18:41 编辑 ]
2011-09-15 18:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
每一个REPLACE指令,如果带ALL或FOR参数,表明那是一个循环动作,ALL是对整个数据集遍历的,而FOR是在遍历过程中采取动作的条件,如果条件符合,就执行实际REPLACE替换,否则跳过(注意虽然是跳过但仍然要移动到那个位置进行检测,不是不做替换就不用检测的)。因此,当你有三个分数级别,要使用三个REPLACE ALL FOR指令的时候,就是对数据表遍历了三次,如果数据表的记录数是1000条,则三条这样的指令就检测了3000次,每条记录检测三次。但在我前面给出的代码中,只有一次遍历数据表!

带FOR参数的指令,如果开启了Rushmore优化,则VFP的执行速度将大大加快,但前提是索引必须对FOR涉及的字段起作用,比如,在楼主的这个数据表中,如果没有建立对分数字段的索引,那么Rushmore是没有作用的。如果建立了索引,Rushmore加快速度的原理,是我曾经给过代码的那一块,即先SEEK到符合条件的记录群开头处,遍历这个群,直到索引字段的记录值不符合条件为止,马上结束动作,就不会对后面显然不符合条件的记录做无谓检测了——就快在这里。

授人以渔,不授人以鱼。
2011-09-15 19:22
qingxinwufua
Rank: 2
等 级:论坛游民
帖 子:21
专家分:48
注 册:2011-9-6
得分:0 
用DO CASE最好的~~
2011-09-16 11:10
wanfei
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-10-23
得分:0 
谢谢,学习了!
2011-10-26 10:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-348405-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.966503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved