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


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

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

帅哥,在线噢!
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望: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条件查询数据,
上面语句中红色部份,要判断视图中那列是否是日期列,应该如何写代码?
谢谢!

 回到顶部
帅哥,在线噢!
HappyFt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/2 16:41:00 [显示全部帖子]

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

 回到顶部
帅哥,在线噢!
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望: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

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

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

应该怎么办?



 回到顶部
帅哥,在线噢!
HappyFt
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望: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出来,说明是下面红色的这句写法不对,应该如何写才对?
谢谢!

 回到顶部
帅哥,在线噢!
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望: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

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

 回到顶部
帅哥,在线噢!
HappyFt
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/5/9 12:20:00 [显示全部帖子]

用于查询中分页加载,是sql的外部数据源,例子不好做.因为日期期不能用like,所以转化为字符,其实就是这句有问题

客户 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%'

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


因为来源是sql的视图,所以上面那种用法会提示日期列不是系统定义的类型

下面蓝色的写法就可以。


 回到顶部