标题:求助!如何对多条记录有用
只看楼主
zhanzhch
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-25
结帖率:100%
已结贴  问题点数:20 回复次数:16 
求助!如何对多条记录有用
close all
clear
use 2.dbf
if 成绩>90
  replace 等级 with '优秀'
  else
  if 成绩>70
    replace 等级 with '合格'
    else
    if 成绩<=60
      replace 等级 with '差'
    endif
  endif
endif
list
只能处理一条记录不能处理多条,请各位帮我一下,我是考级新手,请教
搜索更多相关主题的帖子: replace 记录 close 如何 
2011-08-25 16:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:2 
1.Table名不要用数字
2.用循环处理每笔记录
3.这种情形用DO CASE结构处理逻辑清晰易读

授人以渔,不授人以鱼。
2011-08-25 16:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:18 
程序代码:
CLOSE DATABASES ALL
CLEAR
USE Table2 EXCLUSIVE IN 0
SELECT Table2
GOTO TOP
DO WHILE !EOF()
    DO CASE
        CASE 成绩 >= 90
            cString = "优秀"
        CASE 成绩 >= 80
            cString = "良好"
        CASE 成绩 >= 60
            cString = "合格"
        OTHERWISE
            cString = "差"
    ENDCASE
    REPLACE 等级 WITH cString
    SKIP
ENDDO
USE
RETURN

这是第一种写法,还可以用下面的写法:
程序代码:
CLOSE DATABASES ALL
CLEAR
USE Table2 EXCLUSIVE IN 0
SELECT Table2
REPLACE ALL 等级 WITH Check_Rank(成绩)
USE
RETURN 

FUNCTION Check_Rank(tnScore AS Number) AS Character
    LOCAL lcString AS Character
   
    DO CASE
        CASE tnScore >= 90
            lcString = "优秀"
        CASE tnScore >= 80
            lcString = "良好"
        CASE tnScore >= 60
            lcString = "合格"
        OTHERWISE
            lcString = "差"
    ENDCASE
   
    RETURN lcString

ENDFUNC 

两种写法,你自己仔细琢磨一下,看通了,领会很大,看不通,那就没天份了,呵呵~

授人以渔,不授人以鱼。
2011-08-25 17:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
看通第二种写法,就可以知道SQL SELECT语句的运作机制了。

授人以渔,不授人以鱼。
2011-08-25 17:19
zhanzhch
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-25
得分:0 
谢谢两位,我8年前学过VFP,8年后,忘得差不多了,现在想把它拣起来,谢谢回贴
2011-08-25 17:42
ilikeflash
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:148
专家分:186
注 册:2011-4-6
得分:0 
那俺是没什么天份啦,看不懂第二种,给解释一下呀
2011-08-25 20:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 6楼 ilikeflash
这样看吧,逐步变换:

1.对命令REPLACE ALL FieldName WITH "Text",你是熟悉的,它将表中所有字段FieldName的内容替换为字符串"Text",成批处理(实际上就是那个DO WHILE循环)。
2.前面的"Text"是常量,现在把它改为变量cString,那么,操作仍然是将表中所有字段FieldName的内容替换为变量cString的内容,此时,我们不知道它是什么。
3.再变,cString既然是变量,那么,它也可以是某个函数的结果,比如REPLACE ALL FieldName WITH DATE(),你知道那是什么意思,同样,若Check_Rank()返回cString呢?
4.再深入看,Check_Rank()函数与DATE()函数其实没有什么本质区别,都是返回某个数据而已,它如何返回,决定权在你!

函数Check_Rank(tnScore)的作用:接受一个数值参数,即分数,根据这个分数,返回所在的等级字符串,这个字符串将被REPLACE刷新到指定的字段中。根据上面的调用点代码,可以看到,我用表的当前记录的字段“成绩”的值作为函数Check_Rank()的传入值,那么,返回的“等级”字符串就是这条记录的计算结果(不要以为这种函数必须要用当前数据库的记录值,可以从别的数据库中取过来的)。这就是整个程序的工作流程。这个机制的重要性在于:不管是多么复杂的动作,都可以在函数中完成了再返回给需要的地方使用,简化代码,不要把长达十行的命令都写在一起,更重要的是,很多操作不是你一行中能写得了的。

现在,我们把眼光看住前面的主程序,用纸板把后面的函数代码遮住,你看到只有一个我们很熟悉的REPLACE命令,它看起来跟REPLACE ALL FieldName WITH DATE()没什么区别——事实上真的没区别,那条被我们视为VFP内部命令的指令,就是像我现在这样工作的!

同样,在SQL SELECT的查询命令中,各种参数都可以是这样的自定义函数,控制权在你自己手中。很多你以为做不到的事,其实未必真的做不到,像这样做,你的天空就广阔了许多。实际上,如果熟悉各种查询算法,我们完全可以预料SQL SELECT的动作,某些必须的动作,是算法理论早有定论的,我们也可以据此判断SQL SELECT能做什么、不能做什么,如果它不能做,我们自己做——毕竟工业化的成衣生产线必定无法适应特定身材的人的特定需求。我们学程序设计,是学会量身定做的技能,不是学生产线上的操作习惯。

[ 本帖最后由 TonyDeng 于 2011-8-25 21:09 编辑 ]

授人以渔,不授人以鱼。
2011-08-25 20:57
ilikeflash
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:148
专家分:186
注 册:2011-4-6
得分:0 
有些复杂,不过茅塞顿开,我在书上没看到这样写的呀,这些东东在哪些资料上有,给推荐一些吧,其实俺还自认有些天份滴,在学vfp之前俺只有些粗浅的flash的ActionScript的知识,vfp是一窍不通,一年不到的时间就可以给单位写了一个仓储管理的系统,现在看来俺还只是山塞级别呀。
2011-08-25 23:37
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
得分:0 
close all
clear
use 2.dbf
REPLACE 等级 WITH '优秀' for 成绩 > 90
REPLACE 等级 WITH '合格' for BETWEEN(成绩,61,90)
REPLACE 等级 WITH '差' for 成绩 < 60

楼主对于61-70没有定义,在此定义61-90为'合格' 。
收到的鲜花
  • qjbzjp2011-08-26 10:11 送鲜花  10朵   附言:更好
2011-08-26 07:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 8楼 ilikeflash
没有书会教这些东西。你学过flash,有过程类程序编制经验,就有基础了。

授人以渔,不授人以鱼。
2011-08-26 10:16



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




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

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