Office中国论坛/Access中国论坛

标题: 请教日期的查询代码 [打印本页]

作者: 简    时间: 2012-2-27 11:37
标题: 请教日期的查询代码
我的日期字段[发货日期]格式是:yy-mm-dd hh:nn:ss

现在我只需要对发货日期的yy-mm-dd查询,我在代码中这样写的:

str = str & " and format(发货日期,"yy-mm-dd")>= #" & Me.txtstartime & "#"

Me.txtstartime 的格式是yy-mm-dd

但运行来没有反应,好像format(发货日期,"yy-mm-dd")这里有问题,但我不知该怎么写。

请问该怎么写呢。

作者: Henry D. Sy    时间: 2012-2-27 12:08
str = str & " and format(发货日期,"yy-mm-dd")>= '" & Me.txtstartime & "'"
作者: todaynew    时间: 2012-2-27 12:09
改单引号即可
作者: 简    时间: 2012-2-27 12:49
Henry D. Sy 发表于 2012-2-27 12:08
str = str & " and format(发货日期,"yy-mm-dd")>= '" & Me.txtstartime & "'"

楼上的两位朋友,不得行啊,调试在format(发货日期,"yy-mm-dd")中打住,感觉这里不能用双引号",改为单引号也不行。
作者: Henry D. Sy    时间: 2012-2-27 13:03
Str = Str & " and " & Format(发货日期, "yy-mm-dd") & ">= #" & Me.txtstartime & "#"

作者: 简    时间: 2012-2-27 13:19
Henry D. Sy 发表于 2012-2-27 13:03
Str = Str & " and " & Format(发货日期, "yy-mm-dd") & ">= #" & Me.txtstartime & "#"

还是无法通过。显示'2465‘错误,不能找到表达式中引用的字段"/".
作者: pq318    时间: 2012-2-27 13:44
我也觉得把#改为单引号应该可以了
作者: 简    时间: 2012-2-27 18:20
不管是#还是单引号,都不行,我把附件传上来,大家看看。
作者: 简    时间: 2012-2-27 18:20
不管是#还是单引号,都不行,我把附件传上来,大家看看。
作者: JosephTan    时间: 2012-2-27 20:01
我建议你用debug.print来看看你的str是什么内容,然后再决定怎么修改
作者: t小宝    时间: 2012-2-27 20:04
多加两个y,后面的文本框的值也格式化,就保险了
str = str & " and Format([发件日期], 'yyyy-mm-dd') >= #" & Format(Me.txtstartime, "yyyy-mm-dd") & "#"
作者: 简    时间: 2012-2-27 21:19
t小宝 发表于 2012-2-27 20:04
多加两个y,后面的文本框的值也格式化,就保险了
str = str & " and Format([发件日期], 'yyyy-mm-dd') >= ...

还是不行,晕啊~~~还是提示“2465”错误。
作者: Henry D. Sy    时间: 2012-2-28 09:19
传例子吧!
作者: Henry D. Sy    时间: 2012-2-28 09:46
把日期格式更改为常规格式
  1. Private Sub chaxun()    '查询
  2.     Dim str As String
  3.     If IsNull(Me.txtstartime.Value) = False Then
  4.         str = str & "Format([发件日期],'yyyy-mm-dd') >= #" & Format(Me.txtstartime, "yyyy-mm-dd") & "# And "
  5.     End If
  6.     If IsNull(Me.txtendtime.Value) = False Then
  7.         str = str & "Format([发件日期],'yyyy-mm-dd') <= #" & Format(Me.txtendtime, "yyyy-mm-dd") & "#"
  8.     End If
  9.     Me.sub1.Form.Filter = str: Me.sub1.Form.FilterOn = True
  10. End Sub
复制代码
[attach]48511[/attach]


作者: 简    时间: 2012-2-28 13:07
Henry D. Sy 发表于 2012-2-28 09:46
把日期格式更改为常规格式

HD.Sy版主啊,无法查询啊,不然你在这个时间段11-08-01和11-08-30里查来看,真的筛查不出来。
作者: Henry D. Sy    时间: 2012-2-28 14:00
简 发表于 2012-2-28 13:07
HD.Sy版主啊,无法查询啊,不然你在这个时间段11-08-01和11-08-30里查来看,真的筛查不出来。

[attach]48513[/attach]
作者: JosephTan    时间: 2012-2-28 14:02
依赖性太强了,什么都要别人做好给他
作者: Henry D. Sy    时间: 2012-2-28 14:07
  1. Private Sub chaxun()    '查询
  2.     Dim str As String
  3.     If Not IsNull(Me.txtstartime) Then
  4.         str = str & "Format([发件日期],'yyyy-mm-dd') >= #" & _
  5.               Format(Me.txtstartime, "yyyy-mm-dd") & "# And "
  6.     End If
  7.     If Not IsNull(Me.txtendtime) Then
  8.         str = str & "Format([发件日期],'yyyy-mm-dd') <= #" & _
  9.               Format(Me.txtendtime, "yyyy-mm-dd") & "# And "
  10.     End If
  11.     If Len(str) <> 0 Then
  12.         str = Left(str, Len(str) - 5)
  13.     End If
  14.     Me.sub1.Form.Filter = str
  15.     Me.sub1.Form.FilterOn = True
  16. End Sub
复制代码
将代码改成这样避免空值错误
作者: 简    时间: 2012-2-28 20:34
本帖最后由 简 于 2012-2-28 20:46 编辑
Henry D. Sy 发表于 2012-2-28 14:07
将代码改成这样避免空值错误


版主啊,我现在好像明白我的代码为什么筛选不出结果了。

原因是我的时间里用了小时分秒。

当我要查11-08-10这个指定日期,我把开始时间,结束时间都设为11-08-10,我以为就应该筛选得出来,结果是不行的。
作者: 简    时间: 2012-2-28 20:42
我终于找到问题原因了,正确的代码其实应该如下:

        If IsNull(Me.txtstartime.Value) = False Then
            str = str & " and [发件日期]>= #" & Format(Me.txtstartime, "yyyy-mm-dd") & " 00:00:00 #"        End If
   
        If IsNull(Me.txtendtime.Value) = False Then
            str = str & " and [发件日期]<= #" & Format(Me.txtendtime, "yyyy-mm-dd") & " 23:59:59 #"        End If

要考虑到小时分秒,好像就只有写才合理了。
作者: Henry D. Sy    时间: 2012-3-1 14:00
简 发表于 2012-2-28 20:42
我终于找到问题原因了,正确的代码其实应该如下:

        If IsNull(Me.txtstartime.Value) = False Th ...

18楼的就可以了
作者: 简    时间: 2012-3-2 13:06
Henry D. Sy 发表于 2012-3-1 14:00
18楼的就可以了

18楼的代码我觉得有个小问题就是,代码中的等号=不起作用,换句话中,如果我要查找11-08-01这一天的,开始日期和结束日期都输入11-08-01,是搜不出来的,只有输入开始日期为11-07-31,结束日期为11-08-02才能搜出11-08-01.
作者: ycxchen    时间: 2012-3-3 10:08
简友,为便于数据维护,可换一个思路,用查询作数据源,在查询中设定条件,后打开查询或窗体(用此查询创建一窗体)来查看所要的结果,供参考。[attach]48571[/attach]
作者: 简    时间: 2012-3-3 12:50
ycxchen 发表于 2012-3-3 10:08
简友,为便于数据维护,可换一个思路,用查询作数据源,在查询中设定条件,后打开查询或窗体(用此查询创建 ...

谢谢,这也是一种方法。
作者: 13601812106_01    时间: 2012-3-3 16:18
这样做,不是更好吗
作者: 简    时间: 2012-3-3 21:18
13601812106_01 发表于 2012-3-3 16:18
这样做,不是更好吗

你把开始日期和结束日期都设置为11-08-01来查询试试看就晓得了。




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