以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  日期列筛选异常  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=119100)

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

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


--  作者:有点甜
--  发布时间: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
--  发布时间:2018/5/17 16:58:00
--  
不是,我只要选一行。使用的是Syscmd.Filter.Values()命令,但是即使知道这个值存在,也会被filter筛选掉。
--  作者:lur320
--  发布时间:2018/5/17 17:02:00
--  
现在在有时间数字的行,右击等于当前行日期的列,也不会出现任何列。

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


--  作者:有点甜
--  发布时间: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