机房收费系统-组合查询

前言:机房收费系统有三大难点:组合查询、下机和报表,那么在敲完基本窗体后,首先要面对的就是组合查询这一道大难题,果不其然,我在这里也卡了一段时间,经过昨天的探讨与查询,终于解决了这个问题,那么话不多说,我们开始研究吧:

组合查询,核心关键点如下:

1.组合查询的语法。组合查询需要涉及的SQL语法较为复杂,所以很容易出错;
2.函数的运用。由于在combo控件中显示的数据和你要从数据库中查的数据不一样,所以需要用函数来定义;
3.逻辑设计。这个自然不用多说,三个查询条件和两个组合,一旦你的逻辑出了问题,那么设计起来是会非常麻烦的,甚至无从下口。

界面如下:
在这里插入图片描述

逻辑图:
![在这里插入图片描述](https://img-blog.csdn.net/2018092917235863?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hcnNoYWxscmVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

我设计的基本功能逻辑设计:开始只可以使用查询1,即无组合查询,只用一种条件进行查询;而当想使用组合查询时,点击组合关系1的combo控件,选定“与”或“或”,即可使frame2旗下的控件可用…以此类推,实现组合查询的功能

那么针对开头提到的函数怎么解决呢?因为combofields控件(查询1、2、3开头第一个combo控件)内部的可选项都是相同的,而我们在查询时需要使用数据库表内能识别的数据,所以进行函数定义即可:

Public Function FieldsName(StrFieldsName As String) As String
    Select Case Trim(StrFieldsName)
        Case "卡号"
            FieldsName = "cardno"
        Case "学号"
            FieldsName = "studentno"
        Case "姓名"
            FieldsName = "studentname"
        Case "性别"
            FieldsName = "sex"
        Case "学院"
            FieldsName = "department"
        Case "年级"
            FieldsName = "grade"
        Case "班级"
            FieldsName = "class"
        Case "与"
            FieldsName = "and "
        Case "或"
            FieldsName = "or "
    End Select

而针对之后的语句查询,代码如下:

Private Sub cmdInquire_Click()
    
    txtSQL = "select * from student_info where "
    
    '判断字段选择是否为空
    If Trim(comboSign1.Text) = "" Or Trim(txtFind1.Text) = "" Or Trim(comboFields1.Text) = "" Then
        Label6.Caption = "请您输入条件!"
        Exit Sub
    Else
        '选择查询1
        txtSQL = txtSQL & FieldsName(comboFields1.Text) & " " & comboSign1.Text & "'" & txtFind1.Text & "'"
        '选择组合2
        If Trim(comboRelate1.Text <> "") Then
        
            '如果查询2有空值
            If Trim(comboSign2.Text) = "" Or Trim(txtFind2.Text) = "" Or Trim(comboFields2.Text) = "" Then
                Label6.Caption = "您已经选择了组合1查询!"
                Exit Sub
            '若查询2都有数据
            Else
                txtSQL = txtSQL & FieldsName(comboRelate1) & FieldsName(comboFields2.Text) & comboSign2.Text & "'" & txtFind2.Text & "'"
                
                '选择组合3
                If Trim(comboRelate2.Text <> "") Then
                '如果三个查询3都为空
                
                If Trim(comboSign3.Text) = "" Or Trim(txtFind3.Text) = "" Or Trim(comboFields3.Text) = "" Then
                    Label6.Caption = "您已经选择了组合2查询!"
                    Exit Sub
                '若查询3都有数据
                Else
                    txtSQL = txtSQL & FieldsName(comboRelate2) & FieldsName(comboFields3.Text) & comboSign3.Text & "'" & txtFind3.Text & "'"
                    
                End If
            End If
        End If
    End If
End If
     
    Set mrs = ExecuteSQL(txtSQL, MsgText)
    
    With MyFlexGrid
            .Rows = 1
            .CellAlignment = 4
            .TextMatrix(0, 0) = "卡号"
            .TextMatrix(0, 1) = "学号"
            .TextMatrix(0, 2) = "姓名"
            .TextMatrix(0, 3) = "性别"
            .TextMatrix(0, 4) = "系别"
            .TextMatrix(0, 5) = "年级"
            .TextMatrix(0, 6) = "班级"
            .TextMatrix(0, 7) = "金额"
            .TextMatrix(0, 8) = "备注"
            .TextMatrix(0, 9) = "类型"
            .TextMatrix(0, 10) = "日期"
            .TextMatrix(0, 11) = "时间"
            
        Do While Not mrs.EOF
        
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrs!cardno)
            .TextMatrix(.Rows - 1, 1) = Trim(mrs!studentno)
            .TextMatrix(.Rows - 1, 2) = Trim(mrs!studentname)
            .TextMatrix(.Rows - 1, 3) = Trim(mrs!sex)
            .TextMatrix(.Rows - 1, 4) = Trim(mrs!department)
            .TextMatrix(.Rows - 1, 5) = Trim(mrs!grade)
            .TextMatrix(.Rows - 1, 6) = Trim(mrs!Class)
            .TextMatrix(.Rows - 1, 7) = Trim(mrs!cash)
            .TextMatrix(.Rows - 1, 8) = Trim(mrs!explain)
            .TextMatrix(.Rows - 1, 9) = Trim(mrs!Status)
            .TextMatrix(.Rows - 1, 10) = Trim(mrs!Date)
            .TextMatrix(.Rows - 1, 11) = Trim(mrs!Time)
            mrs.MoveNext
            
        Loop
        End With
End Sub

PS:其中,组合关系中的"与"和"或"在fieldsName(comborelate)中以及前面的函数定义有涉及,大家可以仔细留意其组合形式

总结:其实组合查询,说难也没有那么难,因为涉及的知识点都是我们之前在学生里也使用的,比如函数定义、组合查询语句;而说简单也不简单,因为逻辑关系较为复杂。只要仔细和耐心,遇到问题找他人来一起探讨,就没有目前解决不了的问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值