以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 求助,比较复杂的日期查询,狐爸来帮忙啊! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=30244)
|
-- 作者:sadfox
-- 发布时间:2013/3/23 18:24:00
-- 求助,比较复杂的日期查询,狐爸来帮忙啊!
如图,下拉文本框中的选项对应表中的列。
1、需要不管是只输入年或者输入年和月,或者完整输入时间都能查询到对应列的日期.
2、同理。再增加个时间段的查询栏目,如1995-2013
3、查询没有时能出现提示,没有符合条件的数据。
只能求大神帮忙了,没相识的案列,希望大神能把代码注释写上,好学习一下。
此主题相关图片如下:674.jpg
[此贴子已经被作者于2013-3-24 14:00:41编辑过]
|
-- 作者:sadfox
-- 发布时间:2013/3/23 20:43:00
--
不能实现吗,如果可以,能不能再加个时间段的查询!
|
-- 作者:sadfox
-- 发布时间:2013/3/23 20:47:00
--
郁闷是,为了搞这个,把项目都搞崩溃了,现在按ctrl都启动不了啦!
|
-- 作者:lsy
-- 发布时间:2013/3/23 21:32:00
--
Dim t As Table = Tables("资料查询_资料查询") Dim cmbtxt = e.Form.Controls("ComboBox1").Text t.Filter = (cmbtxt & " = #" & e.Form.Controls("TextBox1").Text & "-" & e.Form.Controls("TextBox2").Text & "-" _ & e.Form.Controls("TextBox3").Text & "#")
|
-- 作者:sadfox
-- 发布时间:2013/3/23 21:49:00
--
以下是引用lsy在2013-3-23 21:32:00的发言: Dim t As Table = Tables("资料查询_资料查询") Dim cmbtxt = e.Form.Controls("ComboBox1").Text t.Filter = (cmbtxt & " = #" & e.Form.Controls("TextBox1").Text & "-" & e.Form.Controls("TextBox2").Text & "-" _ & e.Form.Controls("TextBox3").Text & "#")
引用,你这个只能输入完整的日期才能查询,如果只输入年份或者只输入年和月份就不能查询了
|
-- 作者:e-png
-- 发布时间:2013/3/23 22:40:00
--
这样呢:?
Dim cnl As WinForm.ComboBox = Forms("资料查询").Controls("ComboBox1") Dim tx1 As WinForm.TextBox = Forms("资料查询").Controls("TextBox1") Dim tx2 As WinForm.TextBox = Forms("资料查询").Controls("TextBox2") Dim tx3 As WinForm.TextBox = Forms("资料查询").Controls("TextBox3") Dim t As Table = Tables("资料查询_资料查询") Dim y As String If tx2.text = "" y = "12" Else y = tx2.text End If Dim yf As String = "4,6,9,11,04,06,09,11" Dim dd,dd1 As String If yf.contains(tx2.text) And tx1.text IsNot Nothing dd = "30" ElseIf Date.IsLeapYear(tx1.text) = True dd = "29" ElseIf tx2.text = "2" dd = "28" Else dd = "31" End If If tx3.text = "" dd1 = "1" Else dd1 = tx3.text End If
Dim cs As String = cnl.text & " Like " & "\'" & tx1.text & "\'"
If cnl.text > "" And tx1.text > "" And tx2.text > "" And tx3.text > "" t.Filter = (cnl.text & " = #" & tx1.text & "-" & tx2.Text & "-" & tx3.Text & "#")
Else If cnl.text <> "" And tx1.text <> "" t.filter = " " & cnl.text & " > # " & dd1 & "/" & _ y & "/" & tx1.text & "# And " & cnl.text & " < #" & _ y & "/" & dd & "/" & tx1.text & "# " Else msgbox("请确认某日期或年份已经输入了") End If End If
[此贴子已经被作者于2013-3-23 23:21:34编辑过]
|
-- 作者:sadfox
-- 发布时间:2013/3/23 23:38:00
--
e-png你的代码测试了下,只输入年份查可以了,但是在同时输入年份和月份的时候,月份时间没起作用,还是按年份查的
比如,我要查2013年9月退休人员,但是查询的结果却是2013年所有退休人员
[此贴子已经被作者于2013-3-23 23:39:38编辑过]
|
-- 作者:lsy
-- 发布时间:2013/3/23 23:46:00
--
Dim t As Table = Tables("资料查询_资料查询") Dim cmbtxt = e.Form.Controls("ComboBox1").Text If e.Form.Controls("TextBox3").Text = "" Then t.Filter = cmbtxt & " > = #" & e.Form.Controls("TextBox1").Text & "-" & e.Form.Controls("TextBox2").Text & _ "-01# And " & cmbtxt & " < = #" & e.Form.Controls("TextBox1").Text & "-" & e.Form.Controls("TextBox2").Text & "-28#" ElseIf e.Form.Controls("TextBox2").Text = "" Then t.Filter = cmbtxt & " > = #" & e.Form.Controls("TextBox1").Text & "-01# And " & cmbtxt & " < = #" & e.Form.Controls("TextBox1").Text & "-12#" ElseIf e.Form.Controls("TextBox1").Text = "" Then t.Filter = "" End If
只做了单一文本框为空的判断,而且没算完大小月、2月,基本思路是这样的,结果也是对的,你再把所有的可能性都过一遍,就行了,虽然有点笨,但管用。
真要做到滴水不漏,恐怕要用集合或数组来遍历所有可能性,年月日都要判断。
[此贴子已经被作者于2013-3-24 0:00:07编辑过]
|
-- 作者:sadfox
-- 发布时间:2013/3/24 0:09:00
--
我是只老菜鸟+老白,才接触狐表学VB呢,现在才会点简单的,你的代码我基本上看不懂,辛苦你了,看来我还得等狐爸、大神了!
|
-- 作者:e-png
-- 发布时间:2013/3/24 0:22:00
--
Dim cnl As WinForm.ComboBox = Forms("资料查询").Controls("ComboBox1") Dim tx1 As WinForm.TextBox = Forms("资料查询").Controls("TextBox1") Dim tx2 As WinForm.TextBox = Forms("资料查询").Controls("TextBox2") Dim tx3 As WinForm.TextBox = Forms("资料查询").Controls("TextBox3") Dim t As Table = Tables("资料查询_资料查询") Dim y As String If tx2.text = "" And tx3.text = "" y = "12" ElseIf tx2.text = "" And tx3.text <> "" msgbox("少月份啦~") Return Else y = tx2.text End If Dim yf As String = "4,6,9,11,04,06,09,11" Dim dd,dd1 As String If yf.contains(tx2.text) And tx1.text IsNot Nothing And tx2.text <> "1" dd = "30" ElseIf Date.IsLeapYear(tx1.text) = True And (tx2.text = "" Or tx2.text = "2") dd = "29" ElseIf Date.IsLeapYear(tx1.text) = False And tx2.text = "2" dd = "28" ElseIf tx2.text = "1" dd = "31" Else dd = "31" End If If tx3.text = "" dd1 = "1" Else dd1 = tx3.text End If
If cnl.text > "" And tx1.text > "" And tx2.text > "" And tx3.text > "" t.Filter = (cnl.text & " = #" & tx1.text & "-" & tx2.Text & "-" & tx3.Text & "#") Else
If cnl.text <> "" And tx1.text <> "" If tx1.text.length < 4 msgbox("年份要4位数") Return End If t.filter = " " & cnl.text & " > # " & dd1 & "/" & _ y & "/" & tx1.text & "# And " & cnl.text & " < #" & _ y & "/" & dd & "/" & tx1.text & "# " Else msgbox("请确认某日期或年份已经输入了") End If End If
|