看来我们论坛有很多的高手,,领教了,正在研究代码,看能不能更简单些
经常到论坛解答狐友的问题,本身就是提高自身能力的一个途径。
一段代码写完后,要反复推敲,是否有可优化的余地,直到自己满意为止。
*我的一个成绩输入表单上的计算总分和名次的按钮里的代码,名次字段为字符型的。仅供参考! sele bybmk set filt to set orde to sczwh repl tot with iif(km1=-1,0,km1)+iif(km2=-1,0,km2)+iif(km3=-1,0,km3)+iif(km4=-1,0,km4)+iif(km5=-1,0,km5) all go top *------------------------------ *计算年级名次 SET ORDER TO tot GO top nMc1=1001 &&累计 nMc2=1001 &&同名次 ntot=bybmk.tot REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3) DO whil not EOF() &&& SKIP nMc1=nMc1+1 IF bybmk.tot=ntot REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3) ELSE nMc2=nMc1 REPLACE bybmk.yjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),2,3) ntot=bybmk.tot ENDIF ENDDO GO top *------------------------------------ *计算班级名次 SELECT 0 USE bjk DO whil not EOF() SELECT bybmk SET FILTER TO bybmk.bj=bjk.bj GO top nMc1=1001 &&累计 nMc2=1001 &&同名次 ntot=bybmk.tot REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2) DO whil not EOF() &&& SKIP nMc1=nMc1+1 IF bybmk.tot=ntot REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2) ELSE nMc2=nMc1 REPLACE bybmk.bjmc with SUBSTR(ALLTRIM(STR(nMc2,4)),3,2) ntot=bybmk.tot ENDIF ENDDO SELECT bjk SKIP ENDDO SELECT bjk USE SELECT bybmk SET FILTER TO GO top thisform.grid1.readonly=.t. thisform.refresh
USE EE BLANK ALL FIELDS 年级名次,班级名次 *-----年级排序 INDEX ON -总分 TO ZF STORE 0 TO MC,ZF,CS SCAN IF 总分!=ZF MC=CS+MC+1 CS=0 && 记录相同总分的次数 ELSE CS=CS+1 ENDIF REPLACE 年级名次 WITH MC ZF=总分 MC=年级名次 ENDSCAN BROWSE *-----班级排序 INDEX ON 班级+STR(1000-总分) TO BJZF BJ=[] SCAN IF 班级!=BJ STORE 0 TO CS,ZF MC=1 ELSE IF 总分!=ZF MC=CS+MC+1 CS=0 ELSE CS=CS+1 ENDIF ENDIF REPLACE 班级名次 WITH MC ZF=总分 BJ=班级 ENDSCAN BROWSE SET INDEX TO ERASE BJZF.IDX ERASE ZF.IDX抛砖引玉