以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 代码优化就帮助! (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=129863) |
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/7 20:49:00 -- 代码优化就帮助! Select Case e.DataCol.Name Case "鉴定等级","评审资格","评审性质","评审分组","材料类别","评审结果","重报性质","年份" If e.DataRow("年份") >= 15 Then If e.DataRow("鉴定等级") = "高级工" Or e.DataRow("鉴定等级") = "中级工" Then e.DataRow("实潜准考证号码") = e.DataRow("理论准考证号码") If e.DataRow("申报性质") = "正常申报" Or e.DataRow("申报性质") = "补考理论" Or e.DataRow("申报性质") = "补考实操" Then If e.DataRow("理论成绩") >=60 AndAlso e.DataRow("实操成绩") >=60 Then e.DataRow("评审资格") = True e.DataRow("评审性质") = "正常评审" Else e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" End If Else If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") <60 AndAlso e.DataRow("实操成绩") <60 Then e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("重报性质") = "正常申报" Else If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") >=60 AndAlso e.DataRow("实操成绩") <60 Then e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("重报性质") = "补考实操" Else If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") <60 AndAlso e.DataRow("实操成绩") >=60 Then e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("重报性质") = "补考理论" ElseIf e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") >=60 Then e.DataRow("评审资格") = True e.DataRow("评审性质") = "正常评审" e.DataRow("重报性质") = "" ElseIf e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") <60 Then e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("重报性质") = "正常申报" ElseIf e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") >=60 Then e.DataRow("评审资格") = True e.DataRow("评审性质") = "正常评审" e.DataRow("重报性质") = "" ElseIf e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") <60 Then e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("重报性质") = "正常申报" End If If e.DataRow("评审资格") = True Then e.DataRow("评审结果") = "通过" Else e.DataRow("评审结果") = "否决" End If If e.DataRow("鉴定等级") = "高级工" Then e.DataRow("材料类别") = "D" Else If e.DataRow("鉴定等级") = "中级工" Then e.DataRow("材料类别") = "E" End If End If End If End Select 版主,这段代码还能再精炼优化些吗?感觉逻辑上有些重复!自身水平太差,搞不定! 条件:1、等级有-高级工、中级工; 2、考核方式有理论和实操; 3、报名形式-A 正常申报(理论、实操都要考); B 补考理论(只参加理论); C 补考实操(只参加实操); 4、无论哪种方式报名,都要理论和实操都>=60才有评审资格,评审结果算“通过”
|
||||
-- 作者:有点蓝 -- 发布时间:2019/1/7 21:37:00 -- 试试 Select Case e.DataCol.Name Case "鉴定等级","评审资格","评审性质","评审分组","材料类别","评审结果","重报性质","年份" If e.DataRow("年份") >= 15 Then If e.DataRow("鉴定等级") = "高级工" OrElse e.DataRow("鉴定等级") = "中级工" Then e.DataRow("实潜准考证号码") = e.DataRow("理论准考证号码") If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") >=60 AndAlso e.DataRow("实操成绩") >=60 OrElse e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") >=60 OrElse e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") >=60 Then e.DataRow("评审资格") = True e.DataRow("评审性质") = "正常评审" e.DataRow("重报性质") = "" e.DataRow("评审结果") = "通过" Else e.DataRow("评审资格") = False e.DataRow("评审性质") = "没有资格" e.DataRow("评审结果") = "否决" If e.DataRow("申报性质") = "正常申报" If .DataRow("理论成绩") >=60 Then e.DataRow("重报性质") = "补考实操" ElseIf .DataRow("实操成绩") >=60 e.DataRow("重报性质") = "补考理论" Else e.DataRow("重报性质") = "正常申报" End If ElseIf e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") <60 OrElse e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") <60 e.DataRow("重报性质") = "正常申报" End If End If If e.DataRow("鉴定等级") = "高级工" Then e.DataRow("材料类别") = "D" Else If e.DataRow("鉴定等级") = "中级工" Then e.DataRow("材料类别") = "E" End If End If End If End Select |
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/7 22:12:00 -- ![]() 下面这句代码给我不少启发,DataColChanged事件里有不少可以这样写,这样代码可以精炼不少!我看能不能依葫芦画瓢写写! ElseIf e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") <60 OrElse e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") <60 只是OrElse前后两句以前我只会用两段代码写,因为没有什么关联,现在字面上大概能理解些,还不是很懂! 还有下面这句: If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") >=60 AndAlso e.DataRow("实操成绩") >=60 OrElse e.DataRow("申报性质") = "补考理论" AndAlso e.DataRow("理论成绩") >=60 OrElse e.DataRow("申报性质") = "补考实操" AndAlso e.DataRow("实操成绩") >=60 Then 好象OrElse相当于在汉语的句子中逗号的作用!使前后两句不会发生冲突! [此贴子已经被作者于2019/1/7 22:19:12编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2019/1/7 22:33:00 -- http://www.foxtable.com/webhelp/scr/0220.htm If 【e.DataRow("申报性质") = "正常申报" 同时 e.DataRow("理论成绩") >=60 同时 e.DataRow("实操成绩") >=60】 或者 【e.DataRow("申报性质") = "补考理论" 同时e.DataRow("理论成绩"】>=60) 或者 【e.DataRow("申报性质") = "补考实操" 同时 e.DataRow("实操成绩") >=60】 Then |
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/7 22:48:00 -- 继续向版主求助:项目运行后,点导航栏,问题如下--- 比如:1、假设先点“中高级工资审”,打开窗口后点选其中1个批次(某次中高级工的),点击“查询”,运行正常(假设窗口“总人数”文本框显示50人); 2、再点击“中高级工考核”,点击“查询”,显示人数肯定小于50人,因为有人资格不合格被淘汰了,这时再点回先前的“中高级工资审”窗口,显示却不是50人,而是后面打开的窗口的人数,虽然实际上窗口中表中的行数是没变的,是50人,这时点击“查询”按钮,文本框显示正常; 3、这时再点回“中高级工考核”窗口,问题和2一样,要点一下“查询”按钮才正常。 这是为什么?能解决吗?
|
||||
-- 作者:有点蓝 -- 发布时间:2019/1/7 23:16:00 -- 很简单的道理,查询按钮给表格做了筛选,表格AfterFilter事件又给所有打开的窗口重新赋值了。 如果只是想给当前操作的窗口赋值,可以使用全局变量, 查询按钮事件 vars("窗口") = e.form.name ……其他筛选代码 AfterFilter事件就不需要循环所有的窗口了,直接给窗口赋值即可 if vars("窗口") > "" then Forms(vars("窗口")).Controls("总人数").Text = 总人数 ……
|
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/7 23:23:00 -- ![]() ![]() ![]() |
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/7 23:50:00 -- AfterFilter事件就不需要循环所有的窗口了,直接给窗口赋值即可 if vars("窗口") > "" then Forms(vars("窗口")).Controls("总人数").Text = 总人数 …… 版主,这段代码还是放在AfterFilter事件中?每个窗口写一段?
|
||||
-- 作者:有点甜 -- 发布时间:2019/1/8 9:42:00 --
写到afterfilter事件。
|
||||
-- 作者:lisheng1971 -- 发布时间:2019/1/8 10:09:00 -- Dim IsCompute As Boolean Dim fs() As String = {"鉴定信息汇总","报名登记汇总","中高级工资审","中高级工考核","中高级工评审","技师高技资审","技师高技理论","技师高技考核","技师高技评审","上会评审汇总"} Dim 总人数 As Integer Dim 男 As Integer Dim 女 As Integer Dim 初级工 As Integer Dim 中级工 As Integer Dim 高级工 As Integer Dim 技师 As Integer Dim 高级技师 As Integer For Each f As String In fs If Forms(f).Opened Then If IsCompute = False IsCompute =True 总人数 = e.DataTable.Compute("count(姓名)",Tables("鉴定管理表").filter) 男 = e.DataTable.Compute("count(姓名)", "性别 = \'男\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 女 = e.DataTable.Compute("count(姓名)", "性别 = \'女\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 初级工 = e.DataTable.Compute("count(姓名)", "鉴定等级 = \'初级工\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 中级工 = e.DataTable.Compute("count(姓名)", "鉴定等级 = \'中级工\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 高级工 = e.DataTable.Compute("count(姓名)", "鉴定等级 = \'高级工\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 技师 = e.DataTable.Compute("count(姓名)", "鉴定等级 = \'技师\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) 高级技师 = e.DataTable.Compute("count(姓名)", "鉴定等级 = \'高级技师\' And " & iif(Tables("鉴定管理表").filter>"",Tables("鉴定管理表").filter,"1=1")) End If Forms(f).Controls("总人数").Text = 总人数 Forms(f).Controls("男").Text = 男 Forms(f).Controls("女").Text = 女 Forms(f).Controls("初级工").Text = 初级工 Forms(f).Controls("中级工").Text = 中级工 Forms(f).Controls("高级工").Text = 高级工 Forms(f).Controls("技师").Text = 技师 Forms(f).Controls("高级技师").Text = 高级技师 End If Next 版主,是不是这段代码不要了,按蓝版说的的格式写,可是总报错!
![]() |