Foxtable(狐表)用户栏目专家坐堂 → 代码优化就帮助!


  共有2655人关注过本帖树形打印复制链接

主题:代码优化就帮助!

帅哥哟,离线,有人找我吗?
lisheng1971
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
代码优化就帮助!  发帖心情 Post By: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才有评审资格,评审结果算“通过”

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/7 22:48:00 [只看该作者]

继续向版主求助:项目运行后,点导航栏,问题如下---
      比如:1、假设先点“中高级工资审”,打开窗口后点选其中1个批次(某次中高级工的),点击“查询”,运行正常(假设窗口“总人数”文本框显示50人);
              2、再点击“中高级工考核”,点击“查询”,显示人数肯定小于50人,因为有人资格不合格被淘汰了,这时再点回先前的“中高级工资审”窗口,显示却不是50人,而是后面打开的窗口的人数,虽然实际上窗口中表中的行数是没变的,是50人,这时点击“查询”按钮,文本框显示正常;
              3、这时再点回“中高级工考核”窗口,问题和2一样,要点一下“查询”按钮才正常。
这是为什么?能解决吗?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:我的项目0105.zip

      

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/7 23:16:00 [只看该作者]

很简单的道理,查询按钮给表格做了筛选,表格AfterFilter事件又给所有打开的窗口重新赋值了。

如果只是想给当前操作的窗口赋值,可以使用全局变量,

查询按钮事件
vars("窗口") = e.form.name
……其他筛选代码

AfterFilter事件就不需要循环所有的窗口了,直接给窗口赋值即可
if vars("窗口") > "" then
Forms(vars("窗口")).Controls("总人数").Text = 总人数
……

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/7 23:23:00 [只看该作者]

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看谢蓝版主!这样浅显易懂的解释让我一下就搞明白了!

 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By:2019/1/7 23:50:00 [只看该作者]

AfterFilter事件就不需要循环所有的窗口了,直接给窗口赋值即可
if vars("窗口") > "" then
Forms(vars("窗口")).Controls("总人数").Text = 总人数
……

版主,这段代码还是放在AfterFilter事件中?每个窗口写一段?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/8 9:42:00 [只看该作者]

 

写到afterfilter事件。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
lisheng1971
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:219 积分:1687 威望:0 精华:0 注册:2016/4/14 9:45:00
  发帖心情 Post By: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
版主,是不是这段代码不要了,按蓝版说的的格式写,可是总报错!图片点击可在新窗口打开查看

 回到顶部
总数 12 1 2 下一页