【机房管理】 组合查询优化
- 窗体截图
- 组合查询的功能
- 组合查询的常规做法
- 组合查询的优化思想
- 功能块的具体代码
窗体截图
组合查询的功能
根据用户的查询需求进行相应的字段名,操作符,查询内容的选择。
若要查询满足不只一个条件的记录,则需要进行组合查询,选择相应的 组合关系。
组合查询的常规做法
Combobox控件的Item赋值
SQL查询语句的编辑
Private Sub cmdInquire_Click()
'选择进行学生基本数据查询
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim msgText As String
''分成两个部分:1.txtSQL
'' 2.mrc的查询和显示
'查询语句采用嵌套的形式,根据是否选择组合查询,等写好查询语句之后,再将记录集的创建穿插进去
'将报错的内容单独清理出去
'最后进行记录集的创建
''' ----------------------------SQL 语句编辑------------------------------------------
If combofix1 = "" Then
'选择只进行一次查询
txtSQL = "select * from student_Info where '" & combo1 & "'" & comboOpt1 & "'" & Trim(txtCot1) & "'"
Else ' 选择了1个组合查询
If combo1 = "" Or comboOpt1 = "" Or txtCot1 = "" Then '检查文本框和选项是否填写
MsgBox "请填写数据"
Exit Sub
Else '文本信息完整
txtSQL = "select * from student_Info where '" & combo1 & "'" & comboOpt1 & "'" & Trim(txtCot1) & "'"
If combofix2 <> "" Then '选择了两个组合查询
If combo2 = "" Or comboOpt2 = "" Or txtCot2 = "" Then '检查新添的文本框和选项是否填写
MsgBox "请填写数据"
Exit Sub
Else '信息完整
If combofix1 = "与" Then '根据选项来进行查询
'将选项转化成相应的SQL语句
txtSQL = txtSQL & " and " & "'" & combo3 & "'" & comboOpt3 & Trim(txtCot3) & "'"
Else
txtSQL = txtSQL & " or " & "'" & combo3 & "'" & comboOpt3 & Trim(txtCot3) & "'"
End If '结束2个查询选项SQL语句的编辑
End If '结束2个查询选项SQL语句的编辑
End If '结束两个组合查询的判断
'''---------------------------------------------------------------------
If combofix1 = "与" Then '根据选项来进行查询
'将选项转化成相应的SQL语句
txtSQL = txtSQL & " and " & "'" & combo2 & "' " & comboOpt2 & "'" & Trim(txtCot2) & "'"
Else
txtSQL = txtSQL & " or " & "'" & combo2 & "' " & comboOpt2 & "'" & Trim(txtCot2) & "'"
End If '结束对1个这查询的SQL语句编辑
MsgBox txtSQL '检查SQL语句是否正确 '结束对创建记录集有效性的判断
End If '结束对一个组合查询的SQL语句的编辑
End If
'''----------------------------- 创建相应的数据集 --------------------------
此处略 ... ...
很明显代码 多而且很复杂
组合查询的优化思想
- combobox 赋值采用控件数组循环赋值
- SQL查询语句(自然语言与SQL查询语言替换,将所有的选项内容进行连接)
功能块的功能实现
combobox控件循环赋值
'需要的代码比较多,但是赋值的内容是一样的,代码复用,用控件数组来进行。
Dim i As Integer, j As Integer, m As Integer
'通过控件数组的循环填充 字段名 的下拉项
For i = 0 To 2
combofield.Item(i).AddItem "卡号", 0
combofield.Item(i).AddItem "学号", 1
combofield.Item(i).AddItem "姓名", 2
combofield.Item(i).AddItem "上机时间", 3
combofield.Item(i).AddItem "上机日期", 4
combofield.Item(i).AddItem "下机时间", 5
combofield.Item(i).AddItem "下机日期", 6
combofield.Item(i).AddItem "消费金额", 7
combofield.Item(i).AddItem "金额", 8
Next i
'通过控件数组的循环填充 操作符 的下拉项
For j = 0 To 2
comboOpt.Item(j).AddItem "<", 0
comboOpt.Item(j).AddItem ">", 1
comboOpt.Item(j).AddItem "=", 2
comboOpt.Item(j).AddItem "<>", 3
Next j
'通过控件数组的循环填充 组合关系的下拉项
For m = 0 To 1
combogroup.Item(m).AddItem "与"
combogroup.Item(m).AddItem "或"
Next m
通过控件数组进行循环 清楚当前选择的内容(Text)
Private Sub cmdClear_Click()
'通过控件数组来进行内容的清空
For i = 0 To 2
combofield.Item(i).Text = ""
comboOpt.Item(i).Text = ""
txtCot.Item(i).Text = ""
Next i
For j = 0 To 1
combogroup.Item(j).Text = ""
Next j
End Sub
字段名中自然语言与SQL查询语言的转换
“与”和“或” 逻辑关系与 “AND”“OR”
'因为控件数组中,对象必须是具体的。所以还是循环赋值
For i = 0 To 2
Select Case combofield.Item(i).Text ' 下拉框中的选中的内容
Case "卡号"
m(i) = "'cardno'"
Case "学号"
m(i) = "'studentno'"
Case "姓名"
m(i) = "'studentname'"
Case "上机时间"
m(i) = "'ontime'"
Case "上机日期"
m(i) = "'ondate'"
Case "下机时间"
m(i) = "'offtime'"
Case "下机日期"
m(i) = "'offdate'"
Case "消费金额"
m(i) = "'consume'"
Case "金额"
m(i) = "'cash'"
Case Else
m(i) = ""
End Select
Next i
'同上 组合查询的连接符 也可以通过赋值来进行
'根据用户的选择进行组合查询
For j = 0 To 1
Select Case combogroup.Item(j).Text
Case "与"
n(j) = " AND "
Case "或"
n(j) = " OR "
Case Else
n(j) = " "
End Select
Next j
SQL查询语言的连接
'需要进行自然语言与SQL查询语言的转换之后,可以通过字段的连接来进行SQL查询
'备注 M(3) 表示 字段名 N(j) 表示 组合方式
'trim 函数可以清楚字段首尾的空格,可以用来删除 SQL查询语句尾部的 空字段
strSQL = "select * from Line_Info where " & _
Trim(Trim(m(0)) & " " & Trim(comboOpt.Item(0).Text) & _
" " & Trim(txtCot(0)) & " " & Trim(n(0)) & _
" " & Trim(m(1)) & " " & Trim(comboOpt.Item(1).Text) & _
" " & Trim(txtCot(1)) & " " & Trim(n(1)) & _
" " & Trim(m(2)) & " " & Trim(comboOpt.Item(2).Text) & _
" " & Trim(txtCot(2)))
'通过输出 strSQL 来检验
MsgBox strSQL
'------------------------------选择空值的排错--------------------------
' 单次查询选项不完整
For X = 0 To 2
If Trim(m(X)) = "" Or Trim(comboOpt.Item(X).Text) = "" Or Trim(txtCot(X).Text) = "" Then
'全部赋空值,并弹出提示框注意查询的选项是否填写完整
m(X) = ""
comboOpt.Item(X).Text = ""
txtCot(X).Text = ""
If X <> 2 Then
combogroup.Item(X).Text = ""
End If
' MsgBox "请再次确认查询的选项是否填写完整"
End If
Next X
以上就是我对组合查询的优化,与君分享。