Office中国论坛/Access中国论坛

标题: 【Access小品】切掉尾巴--刘晓军筛选代码优化 [打印本页]

作者: todaynew    时间: 2010-7-20 09:46
标题: 【Access小品】切掉尾巴--刘晓军筛选代码优化
  上周末与版友瑞哥同志讨论一个子窗体数据源问题,看到一段涉及SQL准则部分的写法,对其中代码甚为不解。瑞哥同志告知是从刘晓军同志案例中套用过来的,于是告诉瑞哥了一个简洁写法。今日看到版友 kent_ 73同志又出现同样问题,这是版友  kent_ 73同志的一段筛选代码:
Dim str As String
str = ""
If Not IsNull(Me.Combo2) Then
    str = str & "([项目] like '" & Me.Combo2 & "') AND "
End If
If Len(str) > 0 Then
    str = Left(str, Len(str) - 5)
End If
Me.表1子窗体.Form.Filter = str
Me.表1子窗体.Form.FilterOn = True

  看来刘晓军同志筛选的案例影响很大。不过这段代码简洁的写法应该如下:
Dim str As String
str = ""
If Not IsNull(Me.Combo2) Then
    str = str & "([项目] like '" & Me.Combo2 & "') AND "
End If
str=str & "true"
Me.表1子窗体.Form.Filter = str
Me.表1子窗体.Form.FilterOn = True

  也就是说将去除字符串尾端的" AND ",改变为在尾端加一个"True"字符串。其原理是:True and True=True;False and True=False;因此尾端加一个True不影响逻辑值的结果。由此推理,这样的筛选代码,最为简洁的写法为:

Dim str As String
str = "True"
If Not IsNull(Me.Combo2) Then
    str = str & " AND ([项目] like '" & Me.Combo2 & "')"
End If
Me.表1子窗体.Form.Filter = str
Me.表1子窗体.Form.FilterOn = True

  也就是说将“True”作为str的初始值,屁股和脑袋对掉,从整体上看就是切掉尾巴。

   
作者: michael100    时间: 2010-7-20 10:01
又学一招,谢谢分享
作者: yanwei82123300    时间: 2010-7-20 13:03
又学一招,谢谢分享

作者: apsfxc1    时间: 2010-7-20 15:49
感谢分享
作者: 简    时间: 2010-7-20 23:08
喔,是这样,我也是用了刘晓军的筛选例子,我也曾想过,为什么要用这段代码。
If Len(str) > 0 Then
    str = Left(str, Len(str) - 5)
End If

只因代码达到我的预期结果,所以就没有深究了。
作者: 简    时间: 2010-7-20 23:11
真的是长知识,长水平了。
号召全论坛的朋友们,都向todaynew学习,学习他的钉子精神,不懂的地方非戳穿不可,同时也学习他鸡蛋挑骨头的精神,使代码的性能精上加精!!
作者: zhao__feng    时间: 2010-7-21 08:49
又学一招,谢谢分享


作者: xuwenning    时间: 2010-7-21 08:51
谢谢分享
学习了
作者: 5988143    时间: 2010-7-21 09:12
不錯的技巧
作者: 若离ヘ不弃°    时间: 2012-7-25 17:21
{:soso_e130:}我因为工作对access又爱又恨啊,之前基本都是有问题了去搜下类似的帖子或者直接坐等回答,折腾了将近2个多月,现在总算会一点点了,然后还不知道这份工作可以干多久,又有新的报表要加进去,不过IT的老大让我过去一起做,感觉会轻松许多了,系统的搜了下小品,才发现,确实需要把这位老板的帖子好好读一读,不止是惊喜,啥都有了,我未来两周的工作就是读帖加设计了哈哈。
作者: 13601812106_01    时间: 2012-7-27 14:02
我很喜欢这种简洁的代码
作者: 13601812106_01    时间: 2012-7-27 14:03
我很喜欢这种简洁的代码
作者: wufeng980114    时间: 2012-8-5 10:23
我也很喜欢这样的简洁,但开始学习时,对我这种菜鸟来说,如果没有注解,有时看不懂。
楼主真的很棒啊
作者: xxk8077    时间: 2023-3-8 09:56
学习一下
作者: smileyoufu    时间: 2023-5-13 16:30
学习提高




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3