机房收费系统之组合查询

    组合查询算是机房收费系统中的一个难点了,经过两天的探索,组合查询终于实现了!回头看,恍然大悟:组合查询也不过是一句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 Select

End 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 With
End 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>
我们在平时学习是不能放过任何一个细节的。

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

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


你可能感兴趣的:(机房收费系统之组合查询)