求教啊求教,关于在VB.NET中不定项多条件查询的难题
之前提问了两次都没解决,就像是qq的查找用户那样子,预先不知道用户会输入哪些条件进行查询,我有六个条件,如果用IF去组合的话,将会须要很多IF语句去做,请问高手现在怎么做...
之前提问了两次都没解决,就像是qq的查找用户那样子,预先不知道用户会输入哪些条件进行查询,我有六个条件,如果用IF去组合的话,将会须要很多IF语句去做,请问高手现在怎么做比较简洁呢?
展开
展开全部
这个只能是一一判断的:
为了叙述简单,假设有两个可选条件,内容在: 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语句,就可以简化。
为了叙述简单,假设有两个可选条件,内容在: 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 )。
展开全部
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
。。。。。。
只是大概的思路,希望对你有帮助。
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
。。。。。。
只是大概的思路,希望对你有帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
"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) & "'=''))"
"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) & "'=''))"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询