Foxtable(狐表)用户栏目专家坐堂 → 如何判断视图中的某列是否是日期列?


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

主题:如何判断视图中的某列是否是日期列?

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
如何判断视图中的某列是否是日期列?  发帖心情 Post By:2017/4/30 12:13:00 [只看该作者]

如下面的语句是一个通用的查询where条件的表达式:
Dim flt As String ="生产单号\订单编号\生产日期\订单数量"  ' 这些是在视图中的部份列
Dim Cls() As String = flt.split("\")
For i As Integer = 0 To Cls.Length -1
    If flt > "" Then
        flt = flt & " or "
    End If
    'If Tables("表A").Cols(Cls(i)).IsDate Then  '将日期转换为字符才能用like条件查询
    if uv_sc001.Cols(Cls(i)).IsDate Then   '这里应该如何写?
        flt = flt & " Convert(" & Cls(i) & ",'System.String') like " & txt
    Else
        flt = flt & Cls(i) & " like " & txt
    End If
Next

Se lect * from uv_sc001 where " & flt

如果是从一个视图中通过where条件查询数据,
上面语句中红色部份,要判断视图中那列是否是日期列,应该如何写代码?
谢谢!

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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/2 8:32:00 [只看该作者]

Tables("uv_sc001").Cols(Cls(i)).IsDate

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/2 16:41:00 [只看该作者]

那样会提示不存在名这"uv_sc001"的表

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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/2 17:23:00 [只看该作者]

你要先加载这个表,才能判断这个表的列的类型。

可以使用sqlcommand先获取一个空的临时表

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/9 10:34:00 [只看该作者]

但这个视图是从多个表查询来的,不可能每个相关的数据表都加载吧,

        Dim sql,flt As String

        '---加载表结构进来方便判断日期列

        sql = "se lect * from uv_sc001 where _identify < 0"

        Dim cmd As New SQLCommand

        cmd.ConnectionName = Mydata

        cmd.CommandText = sql

        Dim dt As DataTable = cmd.ExecuteReader()

       

        Dim Cls() As String = dr("FindCols").split("\")

        For i As Integer = 0 To Cls.Length -1

            If flt > "" Then

                flt = flt & " or "

            End If

            If dt.dataCols(Cls(i)).IsDate Then  '将数值或日期转换为字符(日期列判断必须要先加入表结构否则出错)

                flt = flt & " Convert(" & Cls(i) & ",'System.String') like " & txt

            Else

                flt = flt & Cls(i) & " like " & txt

            End If

        Next

直接加载视图执行时如果有日期列就会显示错误:

"类型 交货日期 不是已定义的系统类型."

应该怎么办?



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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/9 10:51:00 [只看该作者]

 那你试试这样写

 

msgbox(dt.DtaCols(Cls(i)).DataType.Name)


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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/9 11:33:00 [只看该作者]

那样如果有日期列会显示datetime  我按下面的写法也会出错
if dt.dataCols(Cls(i)).DataType.Name = "datetime" Then 
msgbox(1) 
   flt = flt & " Convert(" & Cls(i) & ",'System.String') like " & txt
end if

用isdate和上面这两种写法都可以显示1出来,说明是下面红色的这句写法不对,应该如何写才对?
谢谢!

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/9 11:35:00 [只看该作者]

 最后弹出你的 msgbox(flt) 看看

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17158 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/9 11:51:00 [只看该作者]

客户 like '%2017%' or  Convert(制单日期,'System.String') like '%2017%' or 订单编号 like '%2017%' or 产品编码 like '%2017%' or 品名 like '%2017%' or 规格 like '%2017%' or  Convert(交货日期,'System.String') like '%2017%' or 业务员 like '%2017%'

我改成
flt = flt & " Convert(Nvarchar," & Cls(i) & ",120) like " & txt

就可以了,原来那样不知道为何不对?

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/9 11:57:00 [只看该作者]

 如果你去掉这个条件,Convert(交货日期,'System.String') like '%2017%',就可以查?

 

 你最后是要设置筛选,还是要设置加载?能否做个例子测试?


 回到顶部
总数 12 1 2 下一页