Office中国论坛/Access中国论坛

标题: 关于查询 [打印本页]

作者: daxin1    时间: 2011-12-22 20:11
标题: 关于查询
Function 查询()
    Dim strWhere As String

    '如果姓名不为空,则将其加入到条件字符串
    If Not IsNull(Me.部门) Then strWhere = strWhere & " AND 部门='" & Me.部门 & "'"
    '如果性别不为空,则将其加入到条件字符串
    If Not IsNull(Me.问题种类) Then strWhere = strWhere & " AND 问题种类='" & Me.问题种类 & "'"
    '如果籍贯不为空,则将其加入到条件字符串
    If Not IsNull(Me.操作者) Then strWhere = strWhere & " AND 操作者='" & Me.操作者 & "'"
   ' If Not IsNull(Me.time1) Then strWhere = strWhere & " AND 部门='" & Me.部门 & "'"
   
   If Not IsNull(Me.time1) Then strWhere = strWhere & "([日期] >= #" & Format(Me.time1, "yyyy-mm-dd") & "#) AND "
        '【进书日期开始】有输入
        
    'End If
    'If Not IsNull(Me.time2) Then
        '【进书日期截止】有输入
        'strWhere = strWhere & "([日期] <= #" & Format(Me.time2), "yyyy-mm-dd") & "#) AND "
   
   
    '这里为了判断简便,最前面必定会有一个“ AND ”,这是不需要的,这里去掉它
    strWhere = Mid(strWhere, 6)




    '设置子窗体的筛选器条件
    Me.Quality.Form.Filter = strWhere
    '应用筛选
    Me.Quality.Form.FilterOn = True
End Function


红色字体代码错在那里请指导
这个是用在更新后事件里的不知道怎么时间那一个条件不行
作者: wu8313    时间: 2011-12-22 20:55
没有发现错误的地方。
作者: daxin1    时间: 2011-12-22 21:46
我上传了一个例子帮我看一下好吗
希望能按时间来做筛选
开始时间为空时 那就筛选到结束时间
另一种就是开始时间到结束时间的之间进行筛选
作者: wu8313    时间: 2011-12-22 22:15
本帖最后由 wu8313 于 2011-12-23 10:29 编辑

你原来的代码,strwhere 被截断时有些问题(也就是 去掉  and “).

采用 debug.print  strwhere  查看运行时 strwhere的值,你就明白了。

[attach]47774[/attach]

换成图片中的代码 就可以了。
作者: daxin1    时间: 2011-12-23 07:27
换成图片中的代码那就要分开做了,设成两个函数了
我想就在一个函数里做呀 要有两种条件
作者: daxin1    时间: 2011-12-23 07:30
1.开始时间为空时 结束时间有值 那就筛选到结束时间
2.开始时间有值 结束时间有值  开始时间到结束时间的之间进行筛选
我要做在更新事件里
请版本帮忙看看能否实现
作者: daxin1    时间: 2011-12-23 07:34
1开始时间为空时 结束时间有值 那就筛选到结束时间
2.开始时间有值 结束时间有值 那就从开始时间到结束时间的之间进行筛选
能实现吗
作者: Henry D. Sy    时间: 2011-12-23 15:31
daxin1 发表于 2011-12-23 07:27
换成图片中的代码那就要分开做了,设成两个函数了
我想就在一个函数里做呀 要有两种条件

怎么会呢
作者: wu8313    时间: 2011-12-23 15:49
把下图中红色框框选中的部分,换成 我给你的图片的内容就可以了。
[attach]47782[/attach]
作者: daxin1    时间: 2011-12-23 18:10
请版本帮我看下例子
我已经上传上来了
看看错在那里
谢谢
作者: Henry D. Sy    时间: 2011-12-23 18:23
  1. Function 查询()
  2.     Dim strWhere As String

  3.     '如果姓名不为空,则将其加入到条件字符串
  4.     If Not IsNull(Me.姓名) Then strWhere = strWhere & "姓名='" & Me.姓名 & "' AND "
  5.     '如果性别不为空,则将其加入到条件字符串
  6.     If Not IsNull(Me.性别) Then strWhere = strWhere & "性别='" & Me.性别 & "' AND "
  7.     '如果籍贯不为空,则将其加入到条件字符串
  8.     If Not IsNull(Me.籍贯) Then strWhere = strWhere & "籍贯='" & Me.籍贯 & "' AND "

  9.     '这里为了判断简便,最前面必定会有一个“ AND ”,这是不需要的,这里去掉它
  10.     'strWhere = Mid(strWhere, 6)

  11.     If Not IsNull(Me.time1) Then strWhere = strWhere & "([日期] >= #" & Format(Me.time1, "yyyy-mm-dd") & "#) AND "

  12.     If Not IsNull(Me.time2) Then strWhere = strWhere & "([日期] <= #" & Format(Me.time2, "yyyy-mm-dd") & "#) AND "

  13.     If Len(strWhere) <> 0 Then
  14.         '有输入条件
  15.         strWhere = Left(strWhere, Len(strWhere) - 5)
  16.     End If

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

  19.     '设置子窗体的筛选器条件
  20.     Me.frmChild.Form.Filter = strWhere
  21.     '应用筛选
  22.     Me.frmChild.Form.FilterOn = True
  23. End Function
复制代码

作者: daxin1    时间: 2011-12-23 18:42
[attach]47786[/attach]
作者: Henry D. Sy    时间: 2011-12-23 18:45
什么意思,
你红色图中的描述是要求呢,或是存在的问题?
我刚才测试过正常呀!
作者: daxin1    时间: 2011-12-23 18:53
{:soso_e115:}时间还是不能用啊
作者: Henry D. Sy    时间: 2011-12-23 19:21
把各个控件的更新后事件去掉,改为按钮事件,因为两个时间不是更新是赋值!
作者: Henry D. Sy    时间: 2011-12-23 19:22
Henry D. Sy 发表于 2011-12-23 19:21
把各个控件的更新后事件去掉,改为按钮事件,因为两个时间不是更新是赋值!

[attach]47788[/attach]


作者: daxin1    时间: 2011-12-23 20:03
弱弱的问一句 能不能写成用更新事件啊
作者: Henry D. Sy    时间: 2011-12-23 20:41
可以,就把两个时间用手工输入
作者: daxin1    时间: 2011-12-23 20:53
谢谢版本




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