Foxtable(狐表)用户栏目专家坐堂 → [求助][已解决]一段菜单代码,如何提高效率和精简了


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

主题:[求助][已解决]一段菜单代码,如何提高效率和精简了

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


加好友 发短信
等级:幼狐 帖子:104 积分:861 威望:0 精华:0 注册:2013/7/16 16:46:00
[求助][已解决]一段菜单代码,如何提高效率和精简了  发帖心情 Post By:2014/4/29 10:00:00 [只看该作者]

Dim xq As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("辖区查询")

Dim lx As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("类型查询")

Dim zt As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("状态查询")

Dim xq1 As String = xq.Text

Dim lx1 As String = lx.Text

Dim zt1 As String = zt.Text

Dim dt1 As Date = RibbonTabs("内容查询").Groups("按日期").Items("开始时间").Value

Dim dt2 As Date = RibbonTabs("内容查询").Groups("按日期").Items("终止时间").Value

Dim y1 As Integer = dt1.Year

Dim m1 As Integer = dt1.Month

Dim d1 As Integer = dt1.Day

Dim y2 As Integer = dt2.year

Dim m2 As Integer = dt2.Month

Dim d2 As Integer = dt2.Day

Dim time As String

If dt1 <> Nothing And dt2 <> Nothing Then

    time = "签约时间 >= #" & y1 & "/" & m1 & "/" & d1 & "#  And 签约时间 <= #" & y2 & "/" & m2 & "/" & d2 & "# "

Else If dt1 <> Nothing Then

    time = "签约时间 >= #" & y1 & "/" & m1 & "/" & d1 & "# "

Else If dt2 <> Nothing Then

    time = "签约时间 <= #" & y2 & "/" & m2 & "/" & d2 & "# "

Else time"签约时间 <= #2099/01/01#"

End If

Dim qycx As New SQLJoinTableBuilder("综合查询""客户资料"'生成查询表

qycx.ConnectionName = "JD"

qycx.AddCols("合同编号","项目类型","区域","服务状态","签约名称","签约时间","地址","联系人","电话","业务员","备注")

qycx.Build

MainTable = Tables("综合查询")

Dim Filter As String

If xq1 IsNot "" Then

    If lx1 IsNot "" Then

        If zt1 IsNot "" Then

            Filter = "区域 Like '*" & xq1 & "*' And 项目类型 Like '*" & lx1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & "  "

            Tables("综合查询").Filter = Filter

        Else

            Filter = "区域 Like '*" & xq1 & "*' And 项目类型 Like '*" & lx1 & "*' And " & time & "  "

            Tables("综合查询").Filter = Filter

        End If

    Else

        If zt1 IsNot "" Then

            Filter = "区域 Like '*" & xq1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & " "

            Tables("综合查询").Filter = Filter

        Else

            Filter = "区域 Like '*" & xq1 & "*' and " & time & " "

            Tables("综合查询").Filter = Filter

        End If

    End If

Else If lx1 IsNot "" Then

    If zt1 IsNot "" Then

        Filter = "项目类型 Like '*" & lx1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & " "

        Tables("综合查询").Filter = Filter

    Else

        Filter = "项目类型 Like '*" & lx1 & "*' and " & time & " "

        Tables("综合查询").Filter = Filter

    End If

Else

    If zt1 IsNot "" Then

        Filter = "服务状态 Like '*" & zt1 & "*' and " & time & " "

        Tables("综合查询").Filter = Filter

    Else

        Tables("综合查询").Filter = time

    End If

End If

这个代码是先生成表,后做筛选,降低了效率,要改变为 qycx.Filter = filter 又发现Filter代码出不来了。

另外感觉这个结构太乱,反复判断,有没有什么方法简单点

[此贴子已经被作者于2014-4-29 11:24:19编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/29 10:09:00 [只看该作者]

效率难有什么大提示.

代码可以少些几句

 Tables("综合查询").Filter = Filter  这个其实写在最后就可以了,不用 每一个IF里面都写一遍

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


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

呃,楼主 SQLJoinTableBuilder 不是也有 Filter 的么?注意,它使用 Like 的时候,要把 * 改成 %


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


加好友 发短信
等级:幼狐 帖子:104 积分:861 威望:0 精华:0 注册:2013/7/16 16:46:00
  发帖心情 Post By:2014/4/29 10:20:00 [只看该作者]

Dim xq As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("辖区查询")

Dim lx As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("类型查询")

Dim zt As RibbonMenu.ComboBox = RibbonTabs("内容查询").Groups("精确查询").Items("状态查询")

Dim xq1 As String = xq.Text

Dim lx1 As String = lx.Text

Dim zt1 As String = zt.Text

Dim dt1 As Date = RibbonTabs("内容查询").Groups("按日期").Items("开始时间").Value

Dim dt2 As Date = RibbonTabs("内容查询").Groups("按日期").Items("终止时间").Value

Dim y1 As Integer = dt1.Year

Dim m1 As Integer = dt1.Month

Dim d1 As Integer = dt1.Day

Dim y2 As Integer = dt2.year

Dim m2 As Integer = dt2.Month

Dim d2 As Integer = dt2.Day

Dim time As String

If dt1 <> Nothing And dt2 <> Nothing Then

    time = "签约时间 >= #" & y1 & "/" & m1 & "/" & d1 & "#  And 签约时间 <= #" & y2 & "/" & m2 & "/" & d2 & "# "

Else If dt1 <> Nothing Then

    time = "签约时间 >= #" & y1 & "/" & m1 & "/" & d1 & "# "

Else If dt2 <> Nothing Then

    time = "签约时间 <= #" & y2 & "/" & m2 & "/" & d2 & "# "

Else time= "签约时间 <= #2099/01/01#"

End If

Dim qycx As New SQLJoinTableBuilder("综合查询", "客户资料") '生成查询表

qycx.ConnectionName = "JD"

qycx.AddCols("合同编号","项目类型","区域","服务状态","签约名称","签约时间","地址","联系人","电话","业务员","备注")

Dim Filter As String

If xq1 IsNot "" Then

    If lx1 IsNot "" Then

        If zt1 IsNot "" Then

            Filter = "区域 Like '*" & xq1 & "*' And 项目类型 Like '*" & lx1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & "  "

        Else

            Filter = "区域 Like '*" & xq1 & "*' And 项目类型 Like '*" & lx1 & "*' And " & time & "  "

        End If

    Else

        If zt1 IsNot "" Then

            Filter = "区域 Like '*" & xq1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & " "

        Else

            Filter = "区域 Like '*" & xq1 & "*' and " & time & " "

        End If

    End If

Else If lx1 IsNot "" Then

    If zt1 IsNot "" Then

        Filter = "项目类型 Like '*" & lx1 & "*' And 服务状态 Like '*" & zt1 & "*' and " & time & " "

    Else

        Filter = "项目类型 Like '*" & lx1 & "*' and " & time & " "

    End If

Else

    If zt1 IsNot "" Then

        Filter = "服务状态 Like '*" & zt1 & "*' and " & time & " "

    Else

        Tables("综合查询").Filter = time

    End If

End If

qycx.Filter = Filter

qycx.Build

MainTable = Tables("综合查询")

 

 现在改成了这个样子,就过不去了,


此主题相关图片如下:捕获.png
按此在新窗口浏览图片


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


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

 在一个,你filter的生成,也很有问题,可以写成类似这样吗?

 

 Dim Filter As String = "1=1"

 

 If xq1 > "" Then

     Filter = Filter & " And 区域 like '%" & xq1 & "%'"

 End If

 

 If lx1 > "" Then

     Filter = Filter & " And 项目类型 like '%" & lx1 & "%'"

 End If

 

 msgbox(Filter)


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


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

 回复4楼,请看3楼,*要改成%,如果是SQLServer数据库,#还要改成'

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


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

 或者直接这样替换

 

Filter = Filter.Replace("*", "%").Replace("#", "'")


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


加好友 发短信
等级:幼狐 帖子:104 积分:861 威望:0 精华:0 注册:2013/7/16 16:46:00
  发帖心情 Post By:2014/4/29 11:24:00 [只看该作者]

Dim xq As String = RibbonTabs("内容查询").Groups("精确查询").Items("辖区查询").Text

Dim lx As String = RibbonTabs("内容查询").Groups("精确查询").Items("类型查询").Text

Dim zt As String = RibbonTabs("内容查询").Groups("精确查询").Items("状态查询").Text

Dim dt1 As Date = RibbonTabs("内容查询").Groups("按日期").Items("开始时间").Value

Dim dt2 As Date = RibbonTabs("内容查询").Groups("按日期").Items("终止时间").Value

Dim time As String

If dt1 <> Nothing AndAlso dt2 <> Nothing Then

    time = "签约时间 >= '" & dt1 & "'  And 签约时间 <= '" & dt2 & "' "

Else If dt1 <> Nothing Then

    time = "签约时间 >= '" & dt1 & "' "

Else If dt2 <> Nothing Then

    time = "签约时间 <= '" & dt2 & "' "

Else time"签约时间 <= '2099/01/01'"

End If

Dim qycx As New SQLJoinTableBuilder("综合查询""客户资料"'生成查询表

qycx.ConnectionName = "JD"

qycx.AddCols("合同编号","项目类型","区域","服务状态","签约名称","签约时间","地址","联系人","电话","业务员","备注")

Dim Filter As String = time

If xq > "" Then

    Filter = Filter & " And 区域 like '%" & xq & "%'"

End If

If lx > "" Then

    Filter = Filter & " And 项目类型 like '%" & lx & "%'"

End If

If zt > "" Then

    Filter = Filter & " And 服务状态 like '%" & zt & "%'"

End If

qycx.Filter = Filter

qycx.Build

MainTable = Tables("综合查询")

 


这回舒服多了,多谢各位老师的指点。

[此贴子已经被作者于2014-4-29 11:28:46编辑过]

 回到顶部