以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  该字符串未被识别为有效的DateTime  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=44480)

--  作者:tomcat521
--  发布时间:2014/1/1 19:19:00
--  该字符串未被识别为有效的DateTime
做了一个筛选窗口:

其中【设备型号】是ComboBox控件; 
      【设备序列号】是TextBox控件;
      【起始日期】和【截止日期】是DateTimePicker控件;

查询代码:
Dim sbxh As WinForm.ComboBox = e.Form.Controls("设备型号")
Dim sbxlh As WinForm.TextBox = e.Form.Controls("设备序列号")
Dim StartDate As WinForm.DateTimePicker = e.Form.Controls("起始日期")
Dim EndDate As WinForm.DateTimePicker = e.Form.Controls("截止日期")

Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\' And 装机时间 >= #"& StartDate.Value &"# And 装机时间 <= #"& EndDate.Value &"# "

必须同时输入【起始日期】和【截止日期】才能筛选,否则就提示:
该字符串未被识别为有效的DateTime
.NET Framework 版本:2.0.50727.3649
Foxtable 版本:2013.10.14.1
错误所在事件:
详细错误信息:
该字符串未被识别为有效的 DateTime。


--  作者:tomcat521
--  发布时间:2014/1/1 19:20:00
--  
筛选窗口截图:

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


--  作者:程兴刚
--  发布时间:2014/1/1 19:45:00
--  
Dim sbxh As WinForm.ComboBox = e.Form.Controls("设备型号")
Dim sbxlh As WinForm.TextBox = e.Form.Controls("设备序列号")
Dim StartDate As Date = = #1/1/1900#
If e.Form.Controls("起始日期").Value <> Nothing
    StartDate = e.Form.Controls("起始日期").Value
End If
Dim EndDate As Date = #12/30/2099#
If e.Form.Controls("截止日期").Value <> Nothing
    EndDate = e.Form.Controls("截止日期").Value
End If
Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\' And 装机时间 >= #" & StartDate & "# And 装机时间 <= #" & EndDate & "# "

--  作者:tomcat521
--  发布时间:2014/1/1 19:54:00
--  
谢谢兴刚老师!
我自己刚才改成这样也可以了(分成日期是否为空,就是麻烦点):
Dim sbxh As WinForm.ComboBox = e.Form.Controls("设备型号")
Dim sbxlh As WinForm.TextBox = e.Form.Controls("设备序列号")
Dim StartDate As WinForm.DateTimePicker = e.Form.Controls("起始日期")
Dim EndDate As WinForm.DateTimePicker = e.Form.Controls("截止日期")

If StartDate.Value <> Nothing And EndDate.Value <> Nothing Then
    Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\' And 装机时间 >= #"& StartDate.Value &"# And 装机时间 <= #"& EndDate.Value &"# "
    Tables("安装").Sort = "设备序列号"
End If

If StartDate.Value = Nothing And EndDate.Value = Nothing Then
    Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\'"
    Tables("安装").Sort = "设备序列号"
End If


--  作者:tomcat521
--  发布时间:2014/1/1 20:00:00
--  
刚才又发现了一个新的问题:
设备型号包括
BR-526
BR-526-6
BR-526-24
筛选时,选择BR-526-24或者BR-526-6,都是精确筛选,如果选择BR-526,则BR-526-24和BR-526-6也会筛出来。

--  作者:有点甜
--  发布时间:2014/1/1 20:05:00
--  
 呃,因为你设置的是模糊筛选,用了Like,前后有*,所以会匹配
--  作者:程兴刚
--  发布时间:2014/1/1 20:36:00
--  
以下是引用tomcat521在2014-1-1 19:54:00的发言:
谢谢兴刚老师!
我自己刚才改成这样也可以了(分成日期是否为空,就是麻烦点):
Dim sbxh As WinForm.ComboBox = e.Form.Controls("设备型号")
Dim sbxlh As WinForm.TextBox = e.Form.Controls("设备序列号")
Dim StartDate As WinForm.DateTimePicker = e.Form.Controls("起始日期")
Dim EndDate As WinForm.DateTimePicker = e.Form.Controls("截止日期")

If StartDate.Value <> Nothing And EndDate.Value <> Nothing Then
    Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\' And 装机时间 >= #"& StartDate.Value &"# And 装机时间 <= #"& EndDate.Value &"# "
    Tables("安装").Sort = "设备序列号"
End If

If StartDate.Value = Nothing And EndDate.Value = Nothing Then
    Tables("安装").Filter = "设备型号 Like \'*" & sbxh.Text & "*\' And 设备序列号 Like \'*" & sbxlh.Text & "*\'"
    Tables("安装").Sort = "设备序列号"
End If
 
您这样行吗?至少还有两个判断!一个为空一个不为空还有两种组合,绝对不如我的方法简洁!


--  作者:tomcat521
--  发布时间:2014/1/2 20:00:00
--  
醍醐灌顶!姜还是拉的啦啊!
--  作者:tomcat521
--  发布时间:2014/1/2 20:00:00
--  

--  作者:tomcat521
--  发布时间:2014/1/2 20:05:00
--  
姜还是老的辣!