sql查询条件带括号的判断

oceanmeng oceanmeng 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面的where条件是通过VB界面用户自行输入的(也就是用户最多可以带三个不同字段条件查询),共三个左括号、三个右括号用户可以选择有或者是无,只有在选择了字段且输入对应的字段值括号才起作用,但用户根据自己的需要输入相关值后程序自动拼出SQL的where条件来查询

界面如下:
左括号下拉框 字段名下拉框 字段值下拉框 右括号下拉框 连接下拉框
cmbbracket11 cmbField1 txtValue1 cmbbracket12 cmbAndOr1 (内容为and,or)
cmbbracket21 cmbField2 txtValue2 cmbbracket22 cmbAndOr2 (内容为and,or)
cmbbracket31 cmbField3 txtValue3 cmbbracket23


'拼出SQL的where条件:
If cmbField1.Text <> "" And Trim(txtValue1.Text) <> "" Then
Filed1 = " and " & cmbbracket11.Text & "[" & cmbField1.Text & "] = '" & Trim(txtValue1.Text) & "' " & cmbbracket12.Text
End If
If cmbField2.Text <> "" And Trim(txtValue2.Text) <> "" Then
Filed2 = " " & cmbAndOr1.Text & " " & cmbbracket21.Text & "[" & cmbField2.Text & "] = '" & Trim(txtValue2.Text) & "' " & cmbbracket22.Text
End If
If cmbField3.Text <> "" And Trim(txtValue3.Text) <> "" Then
Filed3 = " " & cmbAndOr2.Text & " " & cmbbracket31.Text & "[" & cmbField3.Text & "] = '" & Trim(txtValue3.Text) & "' " & cmbbracket32.Text
End If
If Filed1 <> "" Or Filed2 <> "" Or Filed3 <> "" Then
FiledTotal = " and (1=1 " & Filed1 & Filed2 & Filed3 & ")"
End If


但目前我在判断括号成对性问题难住了我,也就是用户选择左括号,那必须后面有一个右括号;若选择了右括号,那前面必须有一个左括号。但后面或前面可能隔了一个查询字段,也就是一个字段就组成一对括号,这是最简单的方式,但查询条件有or、and的情况下,可能两个字段条件或三个字段条件组成一对括号,这样就需要程序判断客户是否选择好了成对的括号,若匹配不对,拼出来的sql语句就不合法,会导致报错。

各位,下面的用户选择括号合法性判断程序我只会搞一个字段组成一对括号的情况,两个字段条件或三个字段条件组成一对括号的判断难住了我,该如何判断?

If (cmbField1.Text <> "" And Trim(txtValue1.Text) <> "" And cmbbracket11.Text <> "" And cmbbracket12.Text = "") Or (cmbField1.Text <> "" And Trim(txtValue1.Text) <> "" And cmbbracket11.Text = "" And cmbbracket12.Text <> "") Then
MsgBox "左右括号必须成对出现!", vbExclamation, "Warning Info"
If cmbbracket11.Text = "" Then cmbbracket11.SetFocus
If cmbbracket12.Text = "" Then cmbbracket12.SetFocus
Exit Sub
End If
If (cmbField2.Text <> "" And Trim(txtValue2.Text) <> "" And cmbbracket21.Text <> "" And cmbbracket22.Text = "") Or (cmbField2.Text <> "" And Trim(txtValue2.Text) <> "" And cmbbracket21.Text = "" And cmbbracket22.Text <> "") Then
MsgBox "左右括号必须成对出现!", vbExclamation, "Warning Info"
If cmbbracket21.Text = "" Then cmbbracket21.SetFocus
If cmbbracket22.Text = "" Then cmbbracket22.SetFocus
Exit Sub
End If
If (cmbField3.Text <> "" And Trim(txtValue3.Text) <> "" And cmbbracket31.Text <> "" And cmbbracket32.Text = "") Or (cmbField3.Text <> "" And Trim(txtValue3.Text) <> "" And cmbbracket31.Text = "" And cmbbracket32.Text <> "") Then
MsgBox "左右括号必须成对出现!", vbExclamation, "Warning Info"
If cmbbracket31.Text = "" Then cmbbracket31.SetFocus
If cmbbracket32.Text = "" Then cmbbracket32.SetFocus
Exit Sub
End If
...全文
评论 8
收藏 已收藏
分享
返回顶部
oceanmeng
VB基础类 7,788 成员 197,583 内容