机房收费系统——组合查询


对于组合查询一开始接触感觉很难下手,其实在之前的学生中已经有涉及过了,只是过程和联系没有这么复杂,因为当时对组合查询的理解不过深入,所以到这里才不知道如何组合。

在做完整个组合查询之后,梳理思路如下:首先在combo的下拉列表中,由于涉及combo比较多依靠additem逐个添加,结果就是累死,所以For……next语句可以将一个combo循环N次,这也是机房当中可以优化的代码有很多,因为涉及到了很多可以重复循环的过程。

 For a = 0 To 2
      With Combo1(a)
         .AddItem "卡号"
         .AddItem "学号"
         .AddItem "姓名"
         .AddItem "性别"
         .AddItem "系别"
         .AddItem "年级"
         .AddItem "班级"
     End With
   Next a

之所以叫组合查询,就要考虑组合关系,一共有七种组合 1.不选择组合关系 ,只有第一行可用      2.combo0=        3.combo1=       4.选择combo30=+combo31=     5.combo30=+combo31=          6.combo30=+combo31=            7.combo30=+combo31=

下面以最复杂的两个组合全选,涉及三层关系为例:

        txtsql = "select * from student_info where "       '从表中取出所需内容

  If Not Trim(Combo3(1).Text) = "" Then        '确保输入选项完整,第二个组合不为空
        ‘判断所有不为空
        If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" Or _    
            Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" _
            Or Trim(Combo1(2).Text) = "" Or Trim(Combo2(2).Text) = "" Or Trim(Text1(2).Text) = "" Then
            MsgBox "请把您的输入项填写完整", vbOKOnly + vbExclamation, "警告!"
            Exit Sub
        Else

           '两个组合关系均为“与”时
           If Combo3(0).Text = "与" And Combo3(1).Text = "与" Then
                txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & _
                          "'" & Trim(Text1(0).Text) & "'" & " " & "And" & " " & FileName(Combo1(1).Text) _
                          & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "And" _
                          & " " & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
                Set mrc = ExecuteSQL(txtsql, msgtext)

                If mrc.EOF = True Then                      '数据库中无记录时
                    MsgBox "无此记录", vbOKOnly + vbExclamation, "警告!"
                    Combo1(2).SetFocus
                    Text1(2).Text = ""
                    Text1(1).Text = ""
                    Text1(0).Text = ""
                    mygrid1.Clear
                    Exit Sub
                Else
                    Call public
                End If
            End If


           '第一个组合关系为“与”,第二个组合关系为“或”

           If Combo3(0).Text = "与" And Combo3(1).Text = "或" Then
                txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & "'" & _
                    Trim(Text1(0).Text) & "'" & " " & "And" & " " & FileName(Combo1(1).Text) & _
                    " " & Trim$(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "or" & " " & _
                    FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
                Set mrc = ExecuteSQL(txtsql, msgtext)

                If mrc.EOF = True Then                     '数据库中无记录时
                    MsgBox "无此记录", vbOKOnly + vbExclamation, "警告!"
                    Combo1(2).SetFocus
                    Text1(2).Text = ""
                    Text1(1).Text = ""
                    Text1(0).Text = ""
                    mygrid1.Clear
                    Exit Sub
                Else
                    Call public
                End If
            End If


            '第一个组合关系为“或”,第二个组合关系为“与”


            If Combo3(0).Text = "或" And Combo3(1).Text = "与" Then
                txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" _
                        & Trim(Text1(0).Text) & "'" & " " & "or" & " " & FileName(Combo1(1).Text) _
                        & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "and" & " " _
                        & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
                Set mrc = ExecuteSQL(txtsql, msgtext)

                If mrc.EOF = True Then                     '数据库中无记录时
                    MsgBox "无此记录", vbOKOnly + vbExclamation, "警告!"
                    Combo1(2).SetFocus
                    Text1(2).Text = ""
                    Text1(1).Text = ""
                    Text1(0).Text = ""
                    mygrid1.Clear
                    Exit Sub
                Else
                    Call public
                End If
            End If

            '第一个组合关系为“或”,第二个组合关系为“或”
            If Combo3(0).Text = "或" And Combo3(1).Text = "或" Then
                txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & "'" _
                        & Trim(Text1(0).Text) & "'" & " " & "or" & " " & FileName(Combo1(1).Text) _
                        & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "or" & " " _
                        & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
                Set mrc = ExecuteSQL(txtsql, msgtext)

                If mrc.EOF Then                      '数据库中无记录时
                    MsgBox "无此记录", vbOKOnly + vbExclamation, "警告!"
                    Combo1(2).SetFocus
                    Text1(2).Text = ""
                    Text1(1).Text = ""
                    Text1(0).Text = ""
                    mygrid1.Clear
                    Exit Sub
                Else
                    Call public
                End If
            End If

          Set mrc = Nothing                          '释放记录集
      End If
   End If
注:call public     由于每一种组合可能性都需要在mshflexgrid中显示,所以定义了一个公用函数,每次都重复调用即可。

在查询数据库中,将combo下拉列表的字段名转换成数据库中的字段
Private Function FileName(strFileName As String) As String
   Select Case strFileName
        Case "卡号"
            FileName = "cardno"
        Case "学号"
            FileName = "studentno"
        Case "姓名"
           FileName = "studentname"
        Case "性别"
            FileName = "sex"
        Case "系别"
            FileName = "department"
        Case "年级"
            FileName = "grade"
        Case "班级"
            FileName = "class"
    End Select
End Function

总结:1、组合查询自己做还是很吃力的,所以一开始没有头绪。我也是参考了师哥师姐的博客,但是在参考完之后一定要回过头来重新思考这样才能变成自己脑子的东西,这才是站在巨人肩膀上,相反不是单纯为了实现功能,功能实现就过了,这是没有意思的。2、对一些功能的领悟够比如这个窗体当中有一个修改的功能,一开始以为只是完全的靠自己修改,后来才知道他的作用是通过选中mshflexgrid中的一行在修改界面显示这一行的数据,然后修改这一行并更新到数据库。3、代码书写的不够规范。没有明显的分行和注释,对一段代码的分行可以看出你对代码的理解程度,另外注释是必不可少的,现在由于整体的代码量很少不注释似乎没有什么影响,但是将来的编程过程中大量的代码不容易一眼找到你要修改的地方或者合作完成的程序如何让别人明白你编写部分的意思,这就是注释的作用。另外大家都会出现mshflexgrid中的单元格显示不完整数据的情况,一开始我也是以为控件属性或者居中显示的原因,后来发现是代码书写不规范,trim去空格不能少,这样规范书写组合查询就完成了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值