【机房管理】 组合查询优化

【机房管理】 组合查询优化

  • 窗体截图
  • 组合查询的功能
  • 组合查询的常规做法
  • 组合查询的优化思想
  • 功能块的具体代码

窗体截图

这里写图片描述


组合查询的功能

根据用户的查询需求进行相应的字段名,操作符,查询内容的选择。
若要查询满足不只一个条件的记录,则需要进行组合查询,选择相应的 组合关系。


组合查询的常规做法

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

以上就是我对组合查询的优化,与君分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值