【数据库学习】机房收费系统(二)组合查询

来源:互联网 发布:时间同步服务器软件 编辑:程序博客网 时间:2024/05/21 08:51

   机房的组合查询把数据库查询的方式变得复杂与细腻,组合查询也更便于,用户查询到自己所“心仪的”的数据。

拿机房收费系统里的操作员工作记录窗体为例,我们来具体了解一下组合查询。


 1.首先将上述窗体的控件做好命名。

        字段名一列的三个控件分别为,combo1(0),combo1(1),combo1(2)

操作符一列的三个控件分别为,combo2(0),combo2(1),combo2(2)

查询内容一列的三个控件分别为,Text1(0),Text1(1),Text1(2)

组合关系一列的三个控件分别为,combo3(0),combo3(1),combo3(2)


2.窗体加载代码实现。

3.分析组合关系。

        

       上图解析:

上图的判断组合关系,目的在与:只有选择了组合关系,相应选项才可用。
        分四种情况分析

        第一层组合关系不为空
第一层组合关系不为空 第二层不为空
第一层组合关系为空 第二层不可用,并且清空

第二层组合关系为空 第三层不可用并且清空

参考代码:

Private Sub Combo3_Click(Index As Integer)    '判断组合关系,只有选了组合关系,相应的选项才能用        '第一个组合关系不为空的时候    If Trim(Combo3(0).Text) = "与" Or Trim(Combo3(0).Text) = "或" Then        '第二层的选项可用        Combo1(1).Enabled = True        Combo2(1).Enabled = True        Text1(1).Enabled = True    End If        '第一个组关系不为空,且第二个组合关系不为空的时候    If Not Trim(Combo3(0).Text) = "" Then        If Trim(Combo3(1).Text) = "与" Or Trim(Combo3(1).Text) = "或" Then        '第三层的选项可用            Combo1(2).Enabled = True            Combo2(2).Enabled = True            Text1(2).Enabled = True         End If    End If        '第一个组合关系为空,第二层选项不可用,且要清空    If Trim(Combo3(0).Text) = "" Then        Combo1(1).Enabled = False        Combo2(1).Enabled = False        Text1(1).Enabled = False        Combo1(1).Text = ""        Combo2(1).Text = ""        Text1(1).Text = ""    End If             '第二个组合关系为空,第三层选项不可用,且要清空     If Trim(Combo3(1).Text) = "" Then        Combo1(2).Enabled = False        Combo2(2).Enabled = False        Text1(2).Enabled = False        Combo1(2).Text = ""        Combo2(2).Text = ""        Text1(2).Text = ""    End If                End Sub




4.查询逻辑


一:不用组合关系 (下图)


第一层从表中提取信息
如果选项内容为空,提示信息要完善
不为空,判断是否有数据
无数据,提示无数据
有数据,调用添加函数
记录集关闭

二:使用一个组合关系(下图)


从表中提取数据
判断前两层选项是否有空
判断组合关系


判断数据库中是否有该数据
调用添加函数
释放记录集

三:用到两个组合关系(下图)


从表中提取数据
判断前三层是否有空
组合关系判断
两个组合关系都是 与
判断数据库中是否有该数据,调用添加函数,记录集释放
第一个是与 第二个是或
判断数据库中是否有该数据,调用添加函数,记录集释放
第一个是或 第二个是与
判断数据库中是否有该数据,调用添加函数,记录集释放
两个组合关系都是 或
判断数据库中是否有该数据,调用添加函数,记录集释放


组合查询,参考代码

'点击查询,考虑组合关系'combo1是第一列的字段,combo运算符,'text1是查询内容,combo3是组合关系Private Sub cmdInquire_Click()'    Dim mrc As ADODB.Recordset'    Dim strtxtSQL As String'    Dim MsgText As String            '从值班表中提取信息,具体选择条件在下面出现    strtxtSQL = "select * from worklog_Info where "        '一:当不使用组合关系。    If Combo3(0).Text = "" Then    '判断选项是否为空,第一层选项为空时        If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" Then            MsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"            Exit Sub        Else '第一层选项均不为空时,sql语句完整            strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Combo2(0).Text & "'" & Text1(0).Text & "'"            Set mrc = ExecuteSQL(strtxtSQL, MsgText)            '判断数据库。数据库中没有该数据时            If mrc.EOF Then                MsgBox "无该条数据,请重新选择!", vbOKOnly + vbExclamation, "警告"                Text1(0).SetFocus                Text1(0).Text = ""                myflexgrid.Clear                Call jiazai                Exit Sub            Else                Call tianjia   '调用添加函数,将信息加载给myflexgrid            End If         End If    End If    Set mrc = Nothing '释放mrc记录集        '二:使用第一个组合关系    '从表中提取数据    strtxtSQL = "select * from worklog_Info where " 'where 后少一个空格    '第一个组合关系不为空    If Not Trim(Combo3(0).Text) = "" Then        '判断前两层的选项是否有空        If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" _        Or Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" Then            MsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"            Exit Sub        Else            '如果组合关系为“与”            If Combo3(0).Text = "与" Then                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                & " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                If mrc.EOF Then                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(1).SetFocus                    Text1(1).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                 Else                    Call tianjia                 End If            '如果组合关系为“或”            Else                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                & " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                '判断数据库中是否有该数据                '如果没有该数据                If mrc.EOF Then                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(1).SetFocus                    Text1(1).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                Else '如果有该数据                    Call tianjia '调用添加函数                End If             End If        End If        Set mrc = Nothing '释放记录集    End If                        '三:使用两个组合关系,涉及三层选项    '从表中提取数据    strtxtSQL = "select * from worklog_Info where "    If Not Trim(Combo3(1).Text) = "" Then        '判断前两层的选项是否有空        If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" _            Or Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" _            Or Trim(Combo1(2).Text) = "" Or Trim(Combo2(2).Text) = "" Or Trim(Text1(2).Text) = "" Then                    MsgBox "请将选项内容填写完整!", vbOKOnly + vbExclamation, "警告"            Exit Sub        Else        '两个组合关系均为“与”时         If Combo3(0).Text = "与" And Combo3(1).Text = "与" Then                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                            & " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _                            "and" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                If mrc.EOF Then '91错误,未定义                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(2).SetFocus                    Text1(2).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                 Else                    Call tianjia                 End If        End If              '一个组合关系为“与”,一个组合关系为“或”        If Combo3(0).Text = "与" And Combo3(1).Text = "或" Then                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                            & " " & "and" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _                            "or" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                If mrc.EOF Then                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(2).SetFocus                    Text1(2).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                 Else                    Call tianjia                 End If        End If              '一个组合关系为“或”,一个组合关系为“与”        If Combo3(0).Text = "或" And Combo3(1).Text = "与" Then                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                            & " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _                            "and" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                If mrc.EOF Then                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(2).SetFocus                    Text1(2).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                 Else                    Call tianjia                 End If        End If              '两个组合关系都为“或”时        If Combo3(0).Text = "或" And Combo3(1).Text = "或" Then                strtxtSQL = strtxtSQL & filename(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" & Trim(Text1(0).Text) & "'" _                            & " " & "or" & " " & filename(Combo1(1).Text) & " " & Trim(Combo2(1).Text) & "'" & Trim(Text1(1).Text) & "'" & " " & _                            "or" & " " & filename(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"                Set mrc = ExecuteSQL(strtxtSQL, MsgText)                If mrc.EOF Then                    MsgBox "无该条记录,请重新选择!", vbOKOnly + vbExclamation, "警告"                    Text1(2).SetFocus                    Text1(2).Text = ""                    myflexgrid.Clear                    Call jiazai                    Exit Sub                 Else                    Call tianjia                 End If        End If        Set mrc = Nothing    End If End If           End Sub




5.函数的定义

'定义一个函数,让数据库名称和选择框对应Public Function filename(strfilename) As String    Select Case strfilename            Case "教师"        filename = "UserID"        Case "注册日期"        filename = "LoginDate"        Case "注册时间"        filename = "LoginTime"        Case "注销日期"        filename = "LogoutDate"        Case "注销时间"        filename = "LogoutTime"        Case "机器号"        filename = "computer"        Case "级别"        filename = "level"        Case "状态"        filename = "status"             End Select     End Function


6.定义添加过程。

Public Function tianjia() '定义一个添加函数,简化过程        With myflexgrid        .Rows = 1                 Do While Not mrc.EOF        .Rows = .Rows + 1        '.CellAlignment = 4        .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields("UserID"))        .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields("level"))        .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields("LoginDate"))        .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields("LoginTime"))        .TextMatrix(.Rows - 1, 4) = Format(mrc.Fields("LogoutDate"))        .TextMatrix(.Rows - 1, 5) = Format(mrc.Fields("LogoutTime"))        .TextMatrix(.Rows - 1, 6) = VBA.Environ("computername")        .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields("status"))                mrc.MoveNext     Loop     End With     mrc.Close        End Function


小结:组合查询总结出两点,一、不要着急动手敲代码,首先理清思路。

0 0
原创粉丝点击