机房收费系统之组合查询

来源:互联网 发布:奥卡姆剃刀原理 知乎 编辑:程序博客网 时间:2024/04/27 07:21

    组合查询算是机房收费系统中的一个难点了,经过两天的探索,组合查询终于实现了!回头看,恍然大悟:组合查询也不过是一句SQL语句的问题。跟平时的查询大同小异。哎,大道至简啊!

    下面以学生上机统计信息为例。

首先,我们要先定义一个过程,把控件中的运算符与SQL语句联系起来。

<span style="font-family:KaiTi_GB2312;font-size:24px;">Public Function Field(a As String) As String Select Case a    Case "卡号"       Field = "cardno"    Case "姓名"       Field = "studentname"    Case "上机日期"       Field = "ondate"    Case "上机时间"       Field = "ontime"    Case "下机日期"       Field = "offdate"    Case "下机时间"       Field = "offtime"    Case "消费金额"       Field = "consume"    Case "余额"       Field = "cash"    Case "备注"       Field = "status"    Case "与"       Field = "and"    Case "或"       Field = "or"    End SelectEnd Function</span>
然后就可以直接使用控件中的信息,去读取数据库中的信息了。

<span style="font-family:KaiTi_GB2312;font-size:24px;">Private Sub cmdQuery_Click()    Dim mrc As ADODB.Recordset    Dim txtSQL As String    Dim MsgText As String        '如果第一行输入内容有空,提示信息    If Trim(ComboField1.Text) = "" Or Trim(ComboOperator1.Text) = "" Or Trim(txtTest1.Text) = "" Then        MsgBox "请输入完整的查询条件", , "提示"        Exit Sub    End If        '从数据库表line_Info表中读取数据    txtSQL = "select * from line_Info where  "    'txtSQL = 原来读取的+ 第一个字段+操作符+查询内容    txtSQL = txtSQL & Field(ComboField1.Text) & Trim(ComboOperator1.Text) & "'" & Trim(txtTest1.Text) & "'"        '第一个组合关系不为空    If Trim(ComboRelation1.Text <> "") Then            '第二行控件判断消息为空,则提示信息        If Trim(ComboField2.Text) = "" Or Trim(ComboOperator2.Text) = "" Or Trim(txtTest2.Text) = "" Then            MsgBox "您选择了第一个组合关系,请在第二行输入完整条件再查询!", vbOKOnly, "提示"            Exit Sub        Else            '不为空,则从数据库中读取信息。            txtSQL = txtSQL & Field(ComboRelation1.Text) & " " & Field(ComboField2.Text) & Trim(ComboOperator2.Text) & "'" & Trim(txtTest2.Text) & "'"                End If    End If        '第二个组合关系不为空    If Trim(ComboRelation2.Text) <> "" Then        '条件不完整,提示        If Trim(ComboField3.Text) = "" Or Trim(ComboOperator3.Text) = "" Or Trim(txtTest3.Text) = "" Then            MsgBox "您选择了第二个组合关系,请在第三行输入完整条件再查询!", vbOKOnly, "提示"            Exit Sub        Else            txtSQL = txtSQL & Field(ComboRelation2.Text) & " " & Field(ComboField3.Text) & ComboOperator3.Text & "'" & Trim(txtTest3.Text) & "'"        End If    End If    Set mrc = ExecuteSQL(txtSQL, MsgText)    With MyflexGrid        .Rows = 1        .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) = "备注"                Do While Not mrc.EOF            .Rows = .Rows + 1            .TextMatrix(.Rows - 1, 0) = mrc!cardno            .TextMatrix(.Rows - 1, 1) = mrc!studentname            .TextMatrix(.Rows - 1, 2) = mrc!ondate            .TextMatrix(.Rows - 1, 3) = mrc!OnTime            .TextMatrix(.Rows - 1, 4) = mrc!offDate & ""            .TextMatrix(.Rows - 1, 5) = mrc!offTime & ""            .TextMatrix(.Rows - 1, 6) = mrc!consume & ""            .TextMatrix(.Rows - 1, 7) = mrc!cash            .TextMatrix(.Rows - 1, 8) = mrc!Status            mrc.MoveNext        Loop        mrc.Close    End WithEnd Sub</span>


其实最主要的还是一句SQL语句。我们在写SQL语句时也要多多用心了解SQL语句各个部分的含义。

一开始我在写代码时,从数据库中一直读取不出信息。后来发现只是一个小小空格的问题。

例如:正确代码:

<span style="font-family:KaiTi_GB2312;font-size:24px;">txtSQL = txtSQL & Field(ComboRelation2.Text) & " " & Field(ComboField3.Text) & ComboOperator3.Text & "'" & Trim(txtTest3.Text) & "'"</span>
写成这样就不对:

<span style="font-family:KaiTi_GB2312;font-size:24px;">txtSQL = txtSQL & Field(ComboRelation2.Text) & "" & Field(ComboField3.Text) & ComboOperator3.Text & "'" & Trim(txtTest3.Text) & "'"</span>
我们在平时学习是不能放过任何一个细节的。

本着为人民服务的原则,组合查询还是有些地方需要改进的。比如选择了日期查询,应该有个格式提示,或者可以控件选择;还有,组合关系为空,我们可以把下一层控件设置为不可用。。等等。

还是有很多地方需要改进的。


0 0
原创粉丝点击