机房系统(九)——【组合查询】


    机房收费系统首次让小编接触到了“组合查询”。到现在为止,“组合查询”的类型,大概接触到了两种方式,一是单一表多个字段连接的查询;二是多个表的连接查询。机房收费系统中,组合查询占了很大的比重,在做这部分的内容时,也是遇到了不少的问题。
一、组合框列表中字段都是数据库中相应字段的中文名字,直接加载,数据库能查询到相应数据吗?
答案是否定的。那么,如何才能让数据库认识这些中文字段呢?这就需要一个转化的过程了。如下:
Public Function FiledName(a As String) As String
    Select Case a
        Case "卡号"
            FiledName = "cardno"
        Case "姓名"
           FiledName = "studentNo"
        Case "上机日期"
            FiledName = "ondate"
        Case "上机时间"
            FiledName = "ontime"
        Case "下机日期"
            FiledName = "offdate"
    End Select
End Function

当我们在查询下拉列表中的字段时,在查询语句中用上述相应的转化就可以查到我们需要的数据了,这也就是一个等价转化的过程。
二、这么多重复的字段,在敲代码时,复制粘贴可以吗?
答案是否定的。虽然能得到想要的效果,但是出现很多同样的代码片段就会造成代码冗余了。我们要在能实现基本功能的时候,考虑到系统的性能。相同内容的添加,我们只要用控件组,用循环就很好的解决了代码冗余问题。如下:
    For Index = 0 To 2
        With combol(Index)
            .AddItem "卡号"
            .AddItem "姓名"
            .AddItem "上机日期"
            .AddItem "上机时间"
            .AddItem "下机日期"
            .AddItem "下机时间"
            .AddItem "消费金额"
            .AddItem "余额"
            
        End With
    Next i

三、组合查询窗体中会涉及到时间日期问题,需要用户自己填写吗?
答案是也不是。为什么这么说呢。是需要用户选择时间日期,有特定的格式;不是需要用户自己随心所欲,想用什么格式就用什么格式,或者根据提示填写符合格式要求的时间日期,这都会给用户增加操作量。所以我们在选择日期字段时,如果填写信息的文本框变成日期控件,让用户选择时间日期,不就会给使用者提供很多方便了嘛?这要怎么实现呢?如下:
    If combol(i).Text = "上机日期" Or combol(i).Text = "下机日期" Then
        DTPicker1(i).Visible = True
        DTPicker1(i).Format = dtpShortDate
        txt1(i).Text = DTPicker1(i).Value
    End If
    
    If combol(i).Text = "上机时间" Or combol(i).Text = "下机时间" Then
        DTPicker1(i).Visible = True
        DTPicker1(i).Format = dtpTime
        txt1(i).Text = DTPicker1(i).Value
    End If

四、所有字段的操作符都需要“=”、“<”、“>”、“<>” 这四个吗?
答案是否定的。在选择条件判断时,是否需要这四个操作符同时存在,是和用户选择的字段有关系的。操作符与字段的匹配要符合实际的逻辑。比如我们的性别选择,只有是或者不是,不会存在大于或者小于的情况。再比如系别或者姓名,也是存在是与不是两种情况。而时间日期的选择,这四个操作符是都需要存在的。所以,当用户选择字段后,后面紧跟着操作符就要符合该字段的逻辑。在选择列表框的单击事件里,使用下面的判断便可以实现。
    If combol(Index).Text = "姓名" Then
        Symbol(Index).Clear
        Symbol(Index).AddItem "="
        Symbol(Index).AddItem "<>"
    Else
        Symbol(Index).Clear
        Symbol(Index).AddItem "="
        Symbol(Index).AddItem ">"
        Symbol(Index).AddItem "<"
        Symbol(Index).AddItem "<>"
    
    End If

组合查询
思路:查询可以包括一个简单的查询(不使用组合关系)、使用一个组合关系、使用两个组合关系。
重难点:查询语句的书写。小编使用的方式是先查询某一个条件,当满足这个条件时再进行下一个附加条件的查询。简单来说就是,满足a=i的条件时,再进行a=a & 另一个条件,此时a便得到了最新的结果。
    txtsql = "select * from  Line_Info where"
    
    Rem 没有组合关系,判断第一行信息是否为空值
    If Trim(combol(0).Text = "") Or Trim(Symbol(0).Text = "") Or Trim(txt1(0).Text = "") Then
        MsgBox "请将第一行信息填写完整!", 48, "提示"
        Exit Sub
    End If
    '查询第一行信息
    txtsql = txtsql & " " & FiledName(combol(0).Text) & " " & Trim(Symbol(0).Text) & "'" & Trim(txt1(0).Text) & "'"
    
    Rem 一个组合关系,判断第二行信息是否为空
    If Trim(Symbol(3).Text <> "") Then
        If Trim(combol(1).Text = "") Or Trim(Symbol(1).Text = "") Or Trim(txt1(1).Text = "") Then
            MsgBox "请将第二行信息填写完整!", 48, "提示"
            Exit Sub
        Else '查询第二行信息
            txtsql = txtsql & "" & CSymbol(Symbol(3).Text) & " " & FiledName(combol(1).Text) & " " & Trim(Symbol(1).Text) & " '" & Trim(txt1(1).Text) & "'"
        End If
    End If
    
    
    Rem 两个组合关系,判断输入框信息是否为空
    If Trim(Symbol(4).Text <> "") And Trim(Symbol(3).Text <> "") Then
        If Trim(combol(0).Text = "") Or Trim(Symbol(0).Text = "") Or Trim(txt1(0).Text = "") Or _
                Trim(combol(1).Text = "") Or Trim(Symbol(1).Text = "") Or Trim(txt1(1).Text = "") Or _
                Trim(combol(2).Text = "") Or Trim(Symbol(2).Text = "") Or Trim(txt1(2).Text = "") Then
            MsgBox "请将所有输入框信息填写完整!", 48, "提示"
        Else '查询第三行信息
            txtsql = txtsql & "" & CSymbol(Symbol(4).Text) & " " & FiledName(combol(2).Text) & " " & Trim(Symbol(2).Text) & " '" & Trim(txt1(2).Text) & "'"
        End If
    End If

猜你喜欢

转载自blog.csdn.net/LZ15932161597/article/details/84673490