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

13 篇文章 0 订阅
7 篇文章 0 订阅

 

     机房收费系统在磕磕绊绊中过来了,这期间遇到问题,解决问题,最后收获的特别多,在敲得过程中,不断的学习新知识,应该说组合查询是收费系统的一个小难点了吧,起初我是真的不知道该从哪里下手,总是有种剪不断理还乱的感觉,分析分析就绕进去了,我总是把问题想的很复杂,其实只要一句SQL语句,一切都解决了,根本用不到好多好多的IF,FOr 什么的,下面是我自己在实现此过程所需要的代码:以收费系统中基本信息维护为例子,其实其他的也都大同小异

 

     只要一句正确的SQL,其他全OK!

     刚着手时看到这个确实有点迷糊,该从何下手呢?理清楚了才明白,其实很简单,在这里我是用组合关系为点,进行判断,如果组合关系中什么都没有选择,那么就认为查询条件为第一行,而且必须选择完全,如果选择了组合关系,那么相对应的2或3行条件就需要填充完整,接着就是按照条件在数据库中查询内容了。而我的字段名选择是汉字,要想在数据库中查询字段,根本就不认识,这就需要我将汉字转换为相应的字符串,代码中的FieldName 就是我要利用到的一个函数

Private Sub cmdInquire_Click()

 

    Dim mrc As ADODB.Recordset

    Dim txtSQL As String

    Dim MsgText As String

 

    txtSQL = "select * from student_Info where "

    '判断字段的选择是否为空

    If Not Testtxt(comboFiledName1.Text) Then

        MsgBox "请选择字段!", vbOKOnly + vbExclamation, "警告"

        comboFiledName1.SetFocus

        Exit Sub

    End If

    '判断操作符的选择是否为空

    If Not Testtxt(comboOperate1.Text) Then

        MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"

        comboOperate1.SetFocus

        Exit Sub

    End If

    '判断要查询的内容是否为空

    If Not Testtxt(txtContent1.Text) Then

        MsgBox "请在输入要查询的内容", vbOKOnly + vbExclamation, "警告"

        txtContent1.SetFocus

        Exit Sub

    End If

    txtSQL = txtSQL & FiledName(comboFiledName1.Text) & " " & comboOperate1.Text & "'" & txtContent1.Text & "'"

 

    '利用模版函数查看是否是组合查询第一行为空时,查询无效

    '开始组合查询

    If Trim(comboRelation1.Text <> "") Then

        If Trim(comboFiledName2.Text) = "" Or Trim(comboOperate2.Text) = "" Or Trim(txtContent2.Text) = "" Then

            MsgBox "您选择了组合关系,请输入数据之后再查询", vbOKOnly, "提示信息"

            Exit Sub

        Else

            txtSQL = txtSQL & FiledName(comboRelation1.Text) & " " & FiledName(comboFiledName2.Text) & comboOperate2.Text & "'" & Trim(txtContent2.Text) & "'"

        End If

    End If

    If Trim(comboRelation2.Text) <> "" Then

        If Trim(comboFiledName3.Text) = "" Or Trim(comboOperate3.Text) = "" Or Trim(txtContent3.Text) = "" Then

            MsgBox "您选择了第二个组合,请输入数据之后在查询", vbOKOnly, "提示"

            Exit Sub

        Else

            txtSQL = txtSQL & FiledName(comboRelation2.Text) & " " & FiledName(comboFiledName3.Text) & comboOperate3.Text & "'" & Trim(txtContent3.Text) & "'"

        End If

    End If

 

    '开始进行查找

 

    Set mrc = ExecuteSQL(txtSQL, MsgText)

 

    If mrc.RecordCount = 0 Then

        MsgBox "没有您要查找的学生上机记录!", vbOKOnly + vbCritical, "查询提示"

        comboFiledName1.SetFocus

        MSHFlexGrid1.Rows = 1

        '存在上机记录查询成功,填充到表格

    Else

 

        MSHFlexGrid1.Rows = 1

        Do While Not mrc.EOF

 

            With MSHFlexGrid1

                .CellAlignment = 4

                .Rows = .Rows + 1

                .TextMatrix(.Rows - 1, 0) = mrc!studentNo

                .TextMatrix(.Rows - 1, 1) = mrc!studentName

                .TextMatrix(.Rows - 1, 2) = mrc!cardno

                .TextMatrix(.Rows - 1, 3) = mrc!cash

                .TextMatrix(.Rows - 1, 4) = mrc!department

                .TextMatrix(.Rows - 1, 5) = mrc!grade

                .TextMatrix(.Rows - 1, 6) = mrc!Class

                .TextMatrix(.Rows - 1, 7) = mrc!Sex

                .TextMatrix(.Rows - 1, 8) = mrc!Status

                .TextMatrix(.Rows - 1, 9) = mrc!explain

            End With

            mrc.MoveNext

        Loop

    End If

    Exit Sub

End Sub


 

'将汉字转换为相应的字段名字

Public Function FiledName(StrFiledName As String) As String

    Select Case StrFiledName

    Case "卡号"

        FiledName = "cardno"

    Case "学号"

        FiledName = "studentNo"

    Case "姓名"

        FiledName = "studentName"

    Case "性别"

        FiledName = "Sex"

    Case "学院"

        FiledName = "department"

    Case "年级"

        FiledName = "grade"

    Case "班级"

        FiledName = "class"

    Case "与"

        FiledName = "and"

    Case "或"

        FiledName = "or"

 

    End Select

End Function


    这样一个组合查询完成了,重其中我也收获了财富,遇到错误的时候就是进步的时候,实现这个功能最大的感慨就是SQL语句真的很强大,而我还处在最低级,以后还要努力加油了!

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值