以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何判断视图中的某列是否是日期列? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99935) |
-- 作者:happyft -- 发布时间: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条件查询数据, 上面语句中红色部份,要判断视图中那列是否是日期列,应该如何写代码? 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2017/5/2 8:32:00 -- Tables("uv_sc001").Cols(Cls(i)).IsDate |
-- 作者:HappyFt -- 发布时间:2017/5/2 16:41:00 -- 那样会提示不存在名这"uv_sc001"的表 |
-- 作者:有点蓝 -- 发布时间:2017/5/2 17:23:00 -- 你要先加载这个表,才能判断这个表的列的类型。 可以使用sqlcommand先获取一个空的临时表
|
-- 作者:HappyFt -- 发布时间: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 直接加载视图执行时如果有日期列就会显示错误: "类型 交货日期 不是已定义的系统类型." 应该怎么办? |
-- 作者:有点色 -- 发布时间:2017/5/9 10:51:00 -- 那你试试这样写
msgbox(dt.DtaCols(Cls(i)).DataType.Name) |
-- 作者:HappyFt -- 发布时间: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出来,说明是下面红色的这句写法不对,应该如何写才对? 谢谢!
|
-- 作者:有点色 -- 发布时间:2017/5/9 11:35:00 -- 最后弹出你的 msgbox(flt) 看看 |
-- 作者:HappyFt -- 发布时间: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 就可以了,原来那样不知道为何不对?
|
-- 作者:有点色 -- 发布时间:2017/5/9 11:57:00 -- 如果你去掉这个条件,Convert(交货日期,\'System.String\') like \'%2017%\',就可以查?
你最后是要设置筛选,还是要设置加载?能否做个例子测试? |