机房收费系统之组合查询

说到组合查询,其实我们并不陌生,在学生管理系统中,我们曾接触过比较简单的组合查询。


这次,在机房收费系统中,我们遇到了较为复杂一些。通过总结别人的博客,有一种相对简单一点儿的处理方式。这种方法只需考虑组合查询涉及到条件的数目,不需要考虑条件的具体内容,也就是说,如果我们要涉及的查询条件数不变,那么具体代码也就不会有太大的变化!

附一张组合查询条件图吧:

Private Sub cmdInquire_Click()
fgStuinfo.Clear   '每次查询前要清空列表,以免重复
    Dim mrc As ADODB.Recordset
    Dim txtSQL As String
    Dim msgText As String
    
    Dim dok1 As Boolean
    Dim dok2 As Boolean
    Dim dok3 As Boolean
    
    
    Dim Title(0 To 6) As String  '如果条件内容改变,只需要将此处中具体内容改变即可
				'注意这里的名称为SQL表中索要查询列的名称
    Title(0) = "cardno"
    Title(1) = "name"
    Title(2) = "ondate"
    Title(3) = "ontime"
    Title(4) = "offdate"
    Title(5) = "offtime"
    Title(6) = "consumemoney"
    
    Dim compose(0 To 1) As String
    compose(0) = " and "
    compose(1) = " or "
    
    On Error Resume Next
    
    txtSQL = "select * from loginrecord_info where "
    '第一行条件满足
    If Trim(comboFeild(0).Text) <> "" And combosign(0).Text <> "" And txtContent(0).Text <> "" Then
        dok1 = True
    Else
        dok1 = False
        
    End If
    
    '第二行条件满足
    If comboFeild(1).Text <> "" And combosign(1).Text <> "" And txtContent(1).Text <> "" Then
        dok2 = True
    Else
        dok2 = False
    End If
    
    '第三行条件满足
    
    If comboFeild(2).Text <> "" And combosign(2).Text <> "" And txtContent(2).Text <> "" Then
        dok3 = True
    Else
        dok3 = False
    End If
    
    '一行条件也没有
    If (dok1 = False And dok2 = False And dok3 = False) Then
        If comboFeild(0).Text = "" Then
            MsgBox "请输入字段名!"
            Exit Sub
        Else
            If combosign(0).Text = "" Then
                MsgBox "请输入操作符!"
                Exit Sub
            Else
                If txtContent(0).Text = "" Then
                    MsgBox "请输入要查询的内容!"
                    Exit Sub
                End If
            End If
        End If
    End If
    
    
    '有第一行条件
    If dok1 = True Then
        txtSQL = txtSQL & Title(comboFeild(0).ListIndex) & Trim(combosign(0).Text) & _
            "'" & Trim(txtContent(0).Text) & "'"
        
    End If
    
    '有第二行条件
    If dok2 = True Then
        If dok1 = True Then
            If ComboOperater(0).Text = "" Then
                MsgBox "请选择组合关系!"
                Exit Sub
            Else
                txtSQL = txtSQL & compose(ComboOperater(0).ListIndex) & Title(comboFeild(1).ListIndex) & Trim(combosign(1).Text) & _
                    "'" & Trim(txtContent(1).Text) & "'"
            End If
        Else
            txtSQL = txtSQL & Title(comboFeild(1).ListIndex) & Trim(combosign(1).Text) & _
                "'" & Trim(txtContent(1).Text) & "'"
                
        End If
    End If
    
    
    '有第三行条件
   
    If dok3 = True Then
        If dok2 = True Then
            If dok1 = True Then
                If ComboOperater(1).Text = "" Then
                    MsgBox "请选择第二个组合关系!"
                    Exit Sub
                Else
                    txtSQL = txtSQL & compose(ComboOperater(1).ListIndex) & Title(comboFeild(2).ListIndex) & _
                        combosign(2).Text & "'" & Trim(txtContent(2).Text) & "'"
                        
                End If
            Else   ’如果dok1=false
                txtSQL = txtSQL & compose(ComboOperater(1).ListIndex) & Title(comboFeild(2).ListIndex) & _
                    combosign(2).Text & "'" & Trim(txtContent(2).Text) & "'"
                
            End If
        Else
            If dok1 = True Then
                If ComboOperater(0).Text = "" Then
                    MsgBox "请输入第一个组合关系!"
                    Exit Sub
                Else   'dok2=true,dok3=true,dok1=false
                    txtSQL = txtSQL & compose(ComboOperater(0).ListIndex) & Title(comboFeild(2).Text) & _
                        combosign(2).Text & "'" & Trim(txtContent(2).Text) & "'"
                End If
    
        Else  
            txtSQL = txtSQL & Title(comboFeild(2).ListIndex) & combosign(2).Text & _
                "'" & Trim(txtContent(2).Text) & "'"
            End If
   
        End If
    End If
    
    
    Set mrc = ExecuteSQL(txtSQL, msgText)
    
    With fgStuinfo
        .Rows = 2
        .CellAlignment = 4
        .TextMatrix(1, 0) = "卡号"
        .TextMatrix(1, 1) = "姓名"
        .TextMatrix(1, 2) = "登录日期"
        .TextMatrix(1, 3) = "登录时间"
        .TextMatrix(1, 4) = "下机日期"
        .TextMatrix(1, 5) = "下机时间"
        .TextMatrix(1, 6) = "消费金额"
        
        Do While Not mrc.EOF
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(0))
            .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(2))
            .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(5))
            .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(6))
            .TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(7))
            .TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(8))
            .TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(10))
            mrc.MoveNext
            
        Loop
        
        If .TextMatrix(2, 0) = "" Then '如果一条结果也没有,进行提示!
            MsgBox "没有符合您想要的结果"
            Exit Sub
        End If
        
    End With
End Sub
在这里,我们还需注意listindex属性的含义!它的返回值为数字,对应上面我们事先声明的数组表达式!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值