设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 8655|回复: 14

[Access本身] 【Access小品】切掉尾巴--刘晓军筛选代码优化

[复制链接]
发表于 2010-7-20 09:46:47 | 显示全部楼层 |阅读模式
  上周末与版友瑞哥同志讨论一个子窗体数据源问题,看到一段涉及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的初始值,屁股和脑袋对掉,从整体上看就是切掉尾巴。

   

评分

参与人数 1经验 +8 收起 理由
5988143 + 8 我很赞同

查看全部评分

发表于 2010-7-20 10:01:12 | 显示全部楼层
又学一招,谢谢分享
发表于 2010-7-20 13:03:19 | 显示全部楼层
又学一招,谢谢分享
发表于 2010-7-20 15:49:16 | 显示全部楼层
感谢分享
发表于 2010-7-20 23:08:01 | 显示全部楼层
喔,是这样,我也是用了刘晓军的筛选例子,我也曾想过,为什么要用这段代码。
If Len(str) > 0 Then
    str = Left(str, Len(str) - 5)
End If

只因代码达到我的预期结果,所以就没有深究了。
发表于 2010-7-20 23:11:52 | 显示全部楼层
真的是长知识,长水平了。
号召全论坛的朋友们,都向todaynew学习,学习他的钉子精神,不懂的地方非戳穿不可,同时也学习他鸡蛋挑骨头的精神,使代码的性能精上加精!!

点击这里给我发消息

发表于 2010-7-21 08:49:12 | 显示全部楼层
又学一招,谢谢分享

发表于 2010-7-21 08:51:37 | 显示全部楼层
谢谢分享
学习了
发表于 2010-7-21 09:12:06 | 显示全部楼层
不錯的技巧
发表于 2012-7-27 14:02:55 | 显示全部楼层
我很喜欢这种简洁的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-16 16:42 , Processed in 0.114524 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表