Foxtable(狐表)用户栏目专家坐堂 → 日期列筛选异常


  共有2012人关注过本帖树形打印复制链接

主题:日期列筛选异常

帅哥哟,离线,有人找我吗?
lur320
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:952 积分:8432 威望:0 精华:0 注册:2015/8/12 16:28:00
日期列筛选异常  发帖心情 Post By:2018/5/17 16:49:00 [只看该作者]

如图,之前的代码是date.today的方式采集当前日期,后面有需求需要判断具体秒。所以改为了date.now。
列属性改为Longdate time。
但是问题就出现了,当我使用系统代码Syscmd.Filter.Values()或者按钮来筛选日期列的值的时候,如果选择00:00:00一类的日期值,能正常筛选出对应的行,如果选后面带有具体时间的值,则什么都显示不出来。

图片点击可在新窗口打开查看此主题相关图片如下:capture.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/17 16:56:00 [只看该作者]

筛选带时间的日期列要这样处理

 

Dim d1 As Date = "2018-5-17 16:56:00"

Dim d2 As Date = "2018-5-17 16:57:00"

Tables("表A").Filter = "时间 >= #" & d1 & "# and 事件 < #" & d2 & "#"


 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:952 积分:8432 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2018/5/17 16:58:00 [只看该作者]

不是,我只要选一行。使用的是Syscmd.Filter.Values()命令,但是即使知道这个值存在,也会被filter筛选掉。

 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:952 积分:8432 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2018/5/17 17:02:00 [只看该作者]

现在在有时间数字的行,右击等于当前行日期的列,也不会出现任何列。

图片点击可在新窗口打开查看此主题相关图片如下:untitled.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/17 17:22:00 [只看该作者]

foxtable自带的日期筛选是有点问题。你可以在beforeFilter事件处理一下

 

(因为时间的值,可能带有毫秒,直接比较的时候,没有判断毫秒值,所以可能有错)

 

Dim ary() As String = e.Filter.trim.Split(" ")
Dim str As String = ""
msgbox(e.filter)
For i As Integer = 0 To ary.length - 1
    If ary(i) = "[第十列]" Then
        If ary(i+1) = "=" Then
            Dim s As Date = ary(i+2).replace("#","") & " " &  ary(i+3).replace("#", "")
            str &= ary(i) & " >= #" & s & "# and " & ary(i) & " < #" & s.AddSeconds(1) & "# "
            i += 3
        ElseIf ary(i+1) = "<=" Then
            Dim s As Date = ary(i+2).replace("#","") & " " &  ary(i+3).replace("#", "")
            str &= ary(i) & " < #" & s.AddSeconds(1) & "# "
            i += 3
        Else
            str &= ary(i) & " "
        End If
    Else
        str &= ary(i) & " "
    End If
Next
msgbox(str)
e.Filter = str.trim

 


 回到顶部