【机房】——组合查询


前言

     在刚刚开始机房的时候,仅仅刚刚把整个工程的窗体控件布完,听一些同学说组合查询有些难,并且我对他们的话深信不疑。但是你现在不做总会到一点时间你是需要去完成的,想到这些,便开始了探索同学们口中的“难”到底有多“难”。


逻辑分析

想要功能更快的实现,理清逻辑很关键。该动笔时就去拿笔画,一味地在脑子里想很容易把他们之间的联系搞混。起初正是因为没有动手去多画画它们之间的联系,导致走了不少弯路。下午的时候拿起笔来在纸上把它们之间的逻辑关系理了一遍,结果困扰了两天的问题不到两个小时就完全拿下了。

我们以学生基本信息维护为例:首先,它是一个多条件的组合查询,也就是说当我们先判断第一条件,若需要,在组合查询的列表框选择我们组合条件(即“与”or“或”)与第二条件判断,若第二条件也满足不了查询需求,则可使用第三条件。

        


代码实现

    '判断第一行查询条件是否完整
    If Not Testtxt(cboField(0).Text) Or Not Testtxt(cboOpSign(0).Text) Or Not Testtxt(txtInquiryContent(0).Text) Then
        MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
  
    cboF = cboField(0).Text
    Call TRANSFORM(cboF, "")
    
    '查询条件
    txtSQL = "select * from student_info where " & _
                                    cboF & cboOpSign(0).Text & "'" & txtInquiryContent(0).Text & "'"
    
    
    '如果第一个组合查询不为空,判断第二行条件是否为空
    If Testtxt(cboCombineRelation(0).Text) Then
    
        '判断第二行查询条件是否完整
        If Not Testtxt(cboField(1).Text) Or Not Testtxt(cboOpSign(1).Text) Or Not Testtxt(txtInquiryContent(1).Text) Then
            MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
            Exit Sub
        End If
      
        cboF = cboField(1).Text
        cboC = cboCombineRelation(0).Text
        Call TRANSFORM(cboF, cboC)
  
        txtSQL = txtSQL & " " & cboC & " " & cboF & cboOpSign(1).Text & "'" & txtInquiryContent(1).Text & "'"
        GoTo ADD_ROW:
    End If
    
    '如果第二个组合查询不为空,判断第三行条件是否为空
    If Testtxt(cboCombineRelation(0).Text) Then
      
        '判断第三行查询条件是否完整
        If Testtxt(cboField(2).Text) Or Not Testtxt(cboOpSign(2).Text) Or Not Testtxt(txtInquiryContent(2).Text) Then
            MsgBox "请填写完整的查询条件!", vbOKOnly + vbExclamation, "警告"
            Exit Sub
        End If
    
    
        cboF = cboField(2).Text
        cboC = cboCombineRelation(1).Text
        Call TRANSFORM(cboF, cboC)
        
          txtSQL = txtSQL & " " & cboC & " " & cboF & cboOpSign(2).Text & "'" & txtInquiryContent(2).Text & "'"
    End If
ADD_ROW:
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    If mrc.EOF Then
        MsgBox "未查找到符合条件的数据!", vbOKOnly, "提示"
        Exit Sub
    End If


    With MSHFlexGrid1
            .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) = "时间"             '第十二列表头
            .TextMatrix(0, 12) = "类型"             '第十三列表头

        '向表中添加数据
        Do While Not mrc.EOF
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
            .TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
            .TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
            .TextMatrix(.Rows - 1, 3) = mrc.Fields(3)
            .TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
            .TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
            .TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
            .TextMatrix(.Rows - 1, 7) = mrc.Fields(7)
            .TextMatrix(.Rows - 1, 8) = mrc.Fields(8)
            .TextMatrix(.Rows - 1, 9) = mrc.Fields(10)
            .TextMatrix(.Rows - 1, 10) = mrc.Fields(12)
            .TextMatrix(.Rows - 1, 11) = mrc.Fields(13)
            .TextMatrix(.Rows - 1, 12) = mrc.Fields(14)
            mrc.MoveNext
        Loop
    
    End With


评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值