设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2373|回复: 5

[Access本身] 如何截取日期控件中“月日”作为子窗体筛选条件?

[复制链接]
发表于 2016-9-15 12:08:32 | 显示全部楼层 |阅读模式
本帖最后由 ZjwRicky_3721 于 2016-9-15 19:26 编辑

如图,我想通过生日日期查询的两个日期控件,输入一段起始日期,并利用这两个起始日期的“月-日”作为子窗体(包含客户生日字段)的筛选条件,把这一段时间过生日的客户信息筛选显示在子窗体里。但运行结果显示“无效使用 Null”。在下Access初学菜鸟,能力有限,请哪位大神高手指点迷津。感激不尽!!
具体代码如下:strWhere = ""    '设定初始值-空字符串
       If Not IsNull(Me.客户姓名) Then           '判断【客户姓名】条件是否有输入的值
           strWhere = strWhere & "([客户姓名] like '*" & Me.客户姓名 & "*') AND "          '有输入
    End If   
'判断【生日日期查询】条件是否有输入的值,由于有【生日起始日期】【生日截至日期】两个文本框
    If Not IsNull(Me.生日起始日期) Then
       strWhere = strWhere & "(#" & Format(Month([客户生日]), "mm") & "-" & Format(Day([客户生日]), "dd") & "# >= #" & Format(Month(Me.生日起始日期), "mm") & "-" & Format(Day(Me.生日起始日期), "dd") & "#) AND "           '【生日起始日期】有输入
    End If   
    If Not IsNull(Me.生日截至日期) Then
        strWhere = strWhere & "(#" & Format(Month([客户生日]), "mm") & "-" & Format(Day([客户生日]), "dd") & "# <= #" & Format(Month(Me.生日截至日期), "mm") & "-" & Format(Day(Me.生日截至日期), "dd") & "#) AND "          '【生日截至日期】有输入
    End If

    '如果输入了条件,strWhere的最后肯定有" AND ",需要去掉这5个多余的字符
      If Len(strWhere) > 0 Then
          strWhere = Left(strWhere, Len(strWhere) - 5)      '有输入条件
    End If

    Debug.Print strWhere     '先在立即窗口显示一下strWhere的值,代码调试完成后可以取消下一句

    '让子窗体应用窗体查询
    Me.[客户家庭子窗体].Form.Filter = strWhere
    Me.[客户家庭子窗体].Form.FilterOn = True
    Me.[客户保单子窗体].Form.Filter = strWhere
    Me.[客户保单子窗体].Form.FilterOn = True





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2016-9-15 13:33:26 | 显示全部楼层
新上传了完整数据文件......
发表于 2016-9-15 15:39:49 | 显示全部楼层

回帖奖励 +2 点金钱

兄弟太有才了,写这么多.不过大神一般没耐心看

没有ACC,看不到你的数据,你试试这样:取得的MMDD再格式为日期:1000-MM-DD,9999-MM-DD,直接匹配月日不一定行.你的SQL写的烦琐了,找个大神的例子看看.
发表于 2016-9-15 15:41:16 | 显示全部楼层

回帖奖励 +2 点金钱

1000,9999只是个区域,据实选择就行,希望能帮到你
 楼主| 发表于 2016-9-15 17:41:49 | 显示全部楼层
风中漫步 发表于 2016-9-15 15:39
兄弟太有才了,写这么多.不过大神一般没耐心看

没有ACC,看不到你的数据,你试试这样:取得的MMDD再格式为日 ...

谢谢前辈指点!这段代码也是我在网上找来的,稍加改造而已。我自己能写这么多那就太好啦
你的建议我不太理解,不过我后来改用了Dateserial函数,还是不行啊。语句如下:
strWhere = strWhere & "(#" & Format(DateSerial(Year(Now()), Month([客户生日]), Day([客户生日])), "yyyy-mm-dd") & "# >= #" & Format(Me.生日起始日期, "yyyy-mm-dd") & "#) AND "
 楼主| 发表于 2016-9-15 19:31:30 | 显示全部楼层
自己又琢磨了一下,搞定了。是公式用错了,DateSerial函数作为条件不用加“#”和“”的。完整数据已更新,供大家学习参考......
在此特别感谢“风中漫步”老兄的指点,给了我启发才最终解决了这个问题。多谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 06:21 , Processed in 0.083844 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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