求教啊求教,关于在VB.NET中不定项多条件查询的难题

之前提问了两次都没解决,就像是qq的查找用户那样子,预先不知道用户会输入哪些条件进行查询,我有六个条件,如果用IF去组合的话,将会须要很多IF语句去做,请问高手现在怎么做... 之前提问了两次都没解决,就像是qq的查找用户那样子,预先不知道用户会输入哪些条件进行查询,我有六个条件,如果用IF去组合的话,将会须要很多IF语句去做,请问高手现在怎么做比较简洁呢? 展开
 我来答
syx54
2013-01-14 · TA获得超过7378个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2671万
展开全部
这个只能是一一判断的:
为了叙述简单,假设有两个可选条件,内容在: TextBox1(姓名)、TextBox2(部门)
主要是构造 Sql的Where子句,那么:
Dim MySqlWhere As String
MySqlWhere=""

If TextBox1.Text<>"" Then
MySqlWhere= " Where 姓名 = '" & TextBox1.Text & "'"
End If

If TextBox2.Text<>"" Then
if MySqlWhere="" Then
MySqlWhere= " Where 部门 = '" & TextBox1.Text & "'"
Else
MySqlWhere= MySqlWhere & " And 部门 = '" & TextBox1.Text & "'"
End If
End If

'如果还有第3,第4,那只能这样了:
If TextBox3.Text<>"" Then
if MySqlWhere="" Then
MySqlWhere= " Where 字段3 = '" & TextBox3.Text & "'"
Else
MySqlWhere= MySqlWhere & " And 字段3 = '" & TextBox3.Text & "'"
End If
End If

......
If TextBoxn.Text<>"" Then
if MySqlWhere="" Then
MySqlWhere= " Where 字段n = '" & TextBoxn.Text & "'"
Else
MySqlWhere= MySqlWhere & " And 字段n = '" & TextBoxn.Text & "'"
End If
End If

注意:对于字符类型的字段,当然要用单引号,上面那样的,但是对于数值类型,就不要这个单引号的;但是对于日期类型,那么与字符类型不同的是,把前后的2个单引号,改为井号就是“#”, 这是很多初学者容易忽略的,也是很多教科书上不提的问题。

对于文本框,由于.NET不提供控件数组,但是还是可以用语句来实现类似数组的操作,这样以上IF语句,就可以简化。
更多追问追答
追问
代码看明白了,就是设置一个Where子句,首先从第一个条件开始检测,如果第一个条件不为空,那么把第一个条件赋给MySqlWhere,然后检测第二个条件,在检测第二个条件时,检测MySqlWhere是否为初值(即检测了前几项条件是否填入了。)
新手很多不懂,请原谅,请问老师是这个意思吗?
另外我想问,按以上方法确定了查询条件,select语句怎么用呢,再怎么把查询出的记录显示到左侧的DataGridView控件里呀?
追答
1,查询结果在DataGridView控件中的显示,可以在设计状态进行帮定,也可以用语句动态帮定!

因为动态语句,需要知道你的控件名称,而且我对VB.NET还不熟悉,建议你静态帮定吧!
2,关于Sql语句的实现:
"Select * From 表名称 " & MySqlWhere
也就是将Select语句连接上前面的Where字句(字符串变量 MySqlWhere )。
dsk_cy
2013-01-14 · 超过23用户采纳过TA的回答
知道答主
回答量:72
采纳率:100%
帮助的人:55.9万
展开全部
MySqlWhere="select * from where 1=1"
If TextBox1.Text<>"" Then

MySqlWhere= "and 姓名 = '" & TextBox1.Text & "'"

End If

If TextBox2.Text<>"" Then
MySqlWhere= "and 部门 = '" & TextBox2.Text & "'"
End If
If TextBox3.Text<>"" Then
MySqlWhere= "and 字段 = '" & TextBox3.Text & "'"
End If
If TextBox4.Text<>"" Then
MySqlWhere= "and 部门 = '" & TextBox4.Text & "'"
End If
。。。。。。
只是大概的思路,希望对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月时微123
2013-01-14 · 超过42用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:78.7万
展开全部
"where(('" & Trim(Text1.Text) & "'<>''and 姓名= '" & Trim(Text1.Text) & "')" & _
"or('" & Trim(Text1.Text) & "'=''))" & _
"and(('" & Trim(Text2.Text) & "'<>''and 部门= '" & Trim(Text2.Text) & "')" & _
"or('" & Trim(Text2.Text) & "'=''))" & _
"and(('" & Trim(Text3.Text) & "'<>''and 班组= '" & Trim(Text3.Text) & "')" & _
"or('" & Trim(Text3.Text) & "'=''))" & _
"and(('" & Trim(Text4.Text) & "'<>''and 工种= '" & Trim(Text4.Text) & "')" & _
"or('" & Trim(Text4.Text) & "'=''))" & _
"and(('" & Trim(Combo1.Text) & "'<>''and 入场日期> '" & Trim(Combo1.Text) & "')" & _
"or('" & Trim(Combo1.Text) & "'=''))" & _
"and(('" & Trim(Combo2.Text) & "'<>''and 入场日期< '" & Trim(Combo2.Text) & "')" & _
"or('" & Trim(Combo2.Text) & "'=''))" & _
"and(('" & Trim(Text5.Text) & "'<>''and 身份证号码= '" & Trim(Text5.Text) & "')" & _
"or('" & Trim(Text5.Text) & "'=''))"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式