以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [求助]程序如何修改,才能解决以下两个问题  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=8190)

--  作者:abcdzabcdz
--  发布时间:2007/5/29 8:33:00
--  [求助]程序如何修改,才能解决以下两个问题
请问:下列程序如何修改,才能解决以下两个问题:
问题:1、只对当前月份(以”%月份2%”表示)进行排名,以前月份的成绩不进行排名.
   2、能否实现若”成绩”列为空,则不对该列排名进行任何操作.
想法::通过对变量”%月份2%”赋值,将记录进行筛选出来,筛选后无需再对以前月份的成绩进行排名,只需对当前月份进行排名,以加快数据库排名速度.

原程序:
if([%月份1%]=""or [%月份2%]="",MsgBox("请选择起始始月份和比较月份后再执行此操作!",0), Do(112) And FilterFor("月份", "=" ,[%月份2%]) And
SortCol(GridName,"语文_成绩",2) And SortCol(GridName,"班",1) And SortCol(GridName,"月份",1) And evalfor(grid,"语文_班名","if(Row=1,1,if(cell(Row-1,""月份"")=cell(Row,""月份"") And cell(Row-1,""班"")=cell(Row,""班"") And cell(Row-1,""语文_成绩"")<>cell(Row,""语文_成绩""),cell(row-1,""语文_班名"")+1,if(cell(Row-1,""班"")<>cell(Row,""班""),1,cell(row-1,""语文_班名""))))") And SortCol(GridName,"语文_成绩",2) And SortCol(GridName,"月份",1) And evalfor(grid,"语文_级名","if(Row=1,1,if(cell(Row-1,""月份"")=cell(Row,""月份"") And cell(Row-1,""语文_成绩"")<>cell(Row,""语文_成绩""),cell(row-1,""语文_级名"")+1,if(cell(Row-1,""月份"")<>cell(Row,""月份""),1,cell(row-1,""语文_级名""))))")


--  作者:wjq1072
--  发布时间:2007/5/29 8:57:00
--  
做个简单的表,把你的公式放进去然后传上来。这样便于大家帮你找出问题、解决问题哦!
--  作者:abcdzabcdz
--  发布时间:2007/5/29 9:20:00
--  
说明:最初程序对所有“月份”均进行排序,现只要求对“输入比较月份:%月份2%”中的“%月份2%”的输入(如2006.5)进行排名,而不对2006.4进行排名,并若"语文_成绩"为空,则不排名.egd文件下载
--  作者:为爱痴狂
--  发布时间:2007/5/29 9:49:00
--  
这还不简单
if([%月份1%]=""or [%月份2%]="",MsgBox("请选择起始始月份和比较月份后再执行此操作!",0), Do(112) And FilterFor("月份", "=" ,[%月份2%]) And SortCol(GridName,"语文_成绩",2) And SortCol(GridName,"班",1) And SortCol(GridName,"月份",1) And evalfor(grid,"语文_班名","if(Row=1,1,if(cell(Row-1,""月份"")=cell(Row,""月份"") And cell(Row-1,""班"")=cell(Row,""班"") And cell(Row-1,""语文_成绩"")<>cell(Row,""语文_成绩""),cell(row-1,""语文_班名"")+1,if(cell(Row-1,""班"")<>cell(Row,""班""),1,cell(row-1,""语文_班名""))))") And SortCol(GridName,"语文_成绩",2) And SortCol(GridName,"月份",1) And evalfor(grid,"语文_级名","if(Row=1,1,if(cell(Row-1,""月份"")=cell(Row,""月份"") And cell(Row-1,""语文_成绩"")<>cell(Row,""语文_成绩""),cell(row-1,""语文_级名"")+1,if(cell(Row-1,""月份"")<>cell(Row,""月份""),1,cell(row-1,""语文_级名""))))") And ReplaceFor(GridName,"语文_班名","","语文_成绩", "=" ,0) And ReplaceFor(GridName,"语文_级名","","语文_成绩", "=" ,0) And ReplaceFor(GridName,"语文_班名","","语文_成绩", "=" ,"") And ReplaceFor(GridName,"语文_级名","","语文_成绩", "=" ,""))
--  作者:abcdzabcdz
--  发布时间:2007/5/29 10:57:00
--  
有问题:该设计仍然在计算2006.4月成绩.

-=-=-=- 以下内容由 abcdzabcdz2007年05月29日 11:05am 时添加 -=-=-=-
'替换命令'与"让公式失效"是两回事.
--  作者:lxl
--  发布时间:2007/5/30 8:17:00
--  
我猜是不是因为刷新公式同时用了Cell函数 和row变量的缘故,系统把刷新公式看作流水账计算公式,所以要计算整列。
能不能利用框架模式,然后用框架模式:if(row=firstrow,1,ParentRow)来计算排名,这样刷新公式就避免了Cell。解决分数相同的的排名问题用cell函数判断,不知道会不会也被看做流水账计算公式
--  作者:abcdzabcdz
--  发布时间:2007/5/30 13:07:00
--  
不知有无其它办法实现1楼要求?
--  作者:Czy
--  发布时间:2007/5/30 23:34:00
--  
做了一段语言班级排名的公式,其它的自己参照做吧。

if(ListFor(Grid,"语文_成绩")="",true,Do(112) And FilterFor("月份", "=" ,[%月份2%]) And SortCol(GridName,"语文_成绩",2) And SortCol(GridName,"班",1) And SortCol(GridName,"月份",1) And evalfor(grid,"语文_班名","if(Row=1,1,if(cell(Row-1,""月份"")=[月份] And cell(Row-1,""班"")=[班] And cell(Row-1,""语文_成绩"")<>[语文_成绩],VisibleRow,if(cell(Row-1,""班"")<>[班],1,cell(row-1,""语文_班名""))))",1,Rows,1))


--  作者:abcdzabcdz
--  发布时间:2007/5/31 9:46:00
--  
[UploadFile=123_1180575984.bmp]
--  作者:abcdzabcdz
--  发布时间:2007/5/31 9:47:00
--  
简化后的文件,上楼为执行程序后画面。egd文件下载