您的位置:首页 > 其它

机房收费-组合查询

2015-07-26 20:04 169 查看
在机房收费系统中,其中的组合查询仅仅在刚开始的时候构思了一点自己的想

法,但是并没用付诸于行动,去尝试自己的是否正确,而是选择了去看之前看

到的一篇关于组合查询的博客,说起来有些愧疚的啊。还好的是当我理清思路

之后剩下的组合查询都是自己的写的了。

在这分享一下自己的思路,共分为三步。(以学生基本信息维护为例)

1.首先窗体的建立,加入需要控件等来补充界面。

2.当运行之时需要添加信息,也就是供用户选择的消息。

[code]Dim a, b, c
    '对于控件数组简单的添加方法!!!
    For a = 0 To 2
        With Combo1(a)
            .AddItem "卡号"
            .AddItem "学号"
            .AddItem "姓名"
            .AddItem "性别"
            .AddItem "系别"
            .AddItem "年纪"
            .AddItem "班级"
        End With
    Next a

    For b = 0 To 2
        With Combo2(b)
            .AddItem "="
            .AddItem "<"
            .AddItem ">"
            .AddItem "<>"
         End With
    Next b

    For c = 0 To 1
        With Combo3(c)
            .AddItem "与"
            .AddItem "或"
        End With
    Next c


[code]3.有了控件和消息之后就到了查询和显示了。
大家都知道一般的sql查询语句为
`txtsql='select * from student_info where status='使用' _
 and username='" & txtuserno.text & "'"`
我们先来分析一下这个语句,其中前半句
前半句`txtsql='select * from student_info where`
无论放到哪,查什么的东西都是一样的。主要的是后面,后面内容主要分为四部分
1.字段名(status)                 2.操作符(=)
3.要查询的内容,即限制条件('使用')   4.组合关系(and)
知道了这四部分,我们就可以简单的写出sql语句了。
(1)由于combo1中添加的信息为汉语,不能够在sql语句中直接使用
所以我首先定义了一个过程,来进行转换。


[code]Private Function tName(Englishname As String) As String
    '定义一个过程,进而在进行判断的时候,可以省略
    Select Case Englishname
        Case "卡号"
            tName = "cardno"
        Case "学号"
            tName = "studentno"
        Case "姓名"
            tName = "studentname"
        Case "性别"
            tName = "sex"
        Case "系别"
            tName = "department"
        Case "年级"
            tName = "grade"
        Case "班级"
            tName = "class"
    End Select

End Function


[code](2)接下来就是查询语句了。


[code]Private Sub cmdquery_Click()
    Dim a(组合关系)

'我将每一行的查询都分开了,这样的话可以使整体上看上去更加简洁,规范。
'调错等也比较方便。除此之外,他们的txtsql可以继承上面的!放很多。

 '第一行查询。。。。。。。。。。。。。。。。。。。。。
    If Not texttxt(Combo1(0).Text) Then
        MsgBox "请输入第一行字段名", vbOKOnly + vbExclamation, "提示"
        Combo1(0).SetFocus
        Exit Sub
    ElseIf Not texttxt(Combo2(0).Text) Then
        MsgBox "请输入第一行操作符", vbOKOnly + vbExclamation, "提示"
        Combo2(0).SetFocus
        Exit Sub
    ElseIf Not texttxt(Text1(0).Text) Then
        MsgBox "请在第一行输入要查询的内容", vbOKOnly + vbExclamation, "提示"
        Text1(0).SetFocus
        Exit Sub
    Else

        txtsql = "select * from student_info where " &          tName(Combo1(0).Text) & Combo2(0).Text & "'" & Text1(0).Text & "'"
        Set mrc = ExecuteSQl(txtsql, msgTxt)
'其中字段名tName(Combo1(0).Text),操作符Combo2(0).Text,
'查询的内容Text1(0).Text。

        If mrc.EOF Then
            MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        Else
            If Combo3(0).Text = "" Then
            GoTo case1
            End If
        End If
    End If

    '第二行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    Select Case Combo3(0)   '判断与或者非,并记入a(组合关系)
        Case "与"
            a = "and"
        Case "或"
            a = "or"
    End Select

    If Not texttxt(Combo1(1).Text) Then
        MsgBox "请输入第二行字段名", vbOKOnly + vbExclamation, "提示"
        Combo1(1).SetFocus
        Exit Sub
    ElseIf Not texttxt(Combo2(1).Text) Then
        MsgBox "请输入第二行操作符", vbOKOnly + vbExclamation, "提示"
        Combo2(1).SetFocus
        Exit Sub
    ElseIf Not texttxt(Text1(1).Text) Then
        MsgBox "请在第二行输入要查询的内容", vbOKOnly + vbExclamation, "提示"
        Text1(1).SetFocus
        Exit Sub
    Else
        txtsql = txtsql & a & " " & tName(Combo1(1).Text) & Combo2(1).Text & "'" & Text1(1).Text & "'"
        Set mrc = ExecuteSQl(txtsql, msgTxt)
'该语句的第二个txtsql是对于第一行txtsql的继承,
'后面的分别为组合关系a,字段名tName(Combo1(1).Text),
'操作符Combo2(1).Text,要查询的内容Text1(1).Text。

        If mrc.EOF Then
            MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        Else
            If Combo3(1).Text = "" Then
                GoTo case1
            End If
        End If
    End If

    '第三行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
    Select Case Combo3(1)
        Case "与"
            a = "and"
        Case "或"
            a = "or"
    End Select

    If Not texttxt(Combo1(2).Text) Then
        MsgBox "请输入第三行字段名", vbOKOnly + vbExclamation, "提示"
        Combo1(2).SetFocus
        Exit Sub
    ElseIf Not texttxt(Combo2(2).Text) Then
        MsgBox "请输入第三行操作符", vbOKOnly + vbExclamation, "提示"
        Combo2(2).SetFocus
        Exit Sub
    ElseIf Not texttxt(Text1(2).Text) Then
        MsgBox "请在第三行输入要查询的内容", vbOKOnly + vbExclamation, "提示"
        Text1(2).SetFocus
        Exit Sub
    Else
        txtsql = txtsql & a & " " & tName(Combo1(2).Text) & Combo2(2).Text & "'" & Text1(2).Text & "'"
        Set mrc = ExecuteSQl(txtsql, msgTxt)
'同上

        If mrc.EOF Then
            MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        Else
            GoTo case1
        End If
    End If

'   (3)查询信息的展现(这里是运用了goto语句)
case1:
    With myflexgrid
        .Rows = 1
        .CellAlignment = 4
        .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) = "状态"
        .TextMatrix(0, 9) = "备注"
        .TextMatrix(0, 10) = "类型"
        .TextMatrix(0, 11) = "日期"
        .TextMatrix(0, 12) = "时间"
        Do While mrc.EOF = False
            .Rows = .Rows + 1
            .CellAlignment = 4
            .TextMatrix(.Rows - 1, 0) = mrc.Fields(1)
            .TextMatrix(.Rows - 1, 1) = mrc.Fields(2)
            .TextMatrix(.Rows - 1, 2) = mrc.Fields(0)
            .TextMatrix(.Rows - 1, 3) = mrc.Fields(7)
            .TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
            .TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
            .TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
            .TextMatrix(.Rows - 1, 7) = mrc.Fields(3)
            .TextMatrix(.Rows - 1, 8) = mrc.Fields(10)
            .TextMatrix(.Rows - 1, 9) = mrc.Fields(8)
            .TextMatrix(.Rows - 1, 10) = mrc.Fields(14)
            .TextMatrix(.Rows - 1, 11) = mrc.Fields(12)
            .TextMatrix(.Rows - 1, 12) = mrc.Fields(13)
            mrc.MoveNext
        Loop
    End With
End Sub


当我刚开始的时候想到组合查询感觉是很复杂的,但是当理清楚其中的思路之

后就感觉简单了很多。希望大家能够从此得到一些收获。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: