欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【机房收费系统】-查询

程序员文章站 2022-05-03 16:07:10
...

前言:

      刚开始做的时候总会自己吓自己,组合查询这个之前学生的时候师父就告诉说是很重要,这次在做之前就有了充分的心理准备,其实开始动手之后远远没有自己想象中的那么难,提起机房总免不了提起一个词-逻辑,理清逻辑有多重要,大家也都进行了,想必是深有体会啊,接下来就总结和梳理下自己捣鼓这个时候的思路;


内容:

       在这里就以学生基本信息维护为例,总结下关于组合查询的内容,其余的两个也都是大同小异;


思考过程:

      1、第一个查询条件可单独查询,组合关系combo3(0)符合的时候txtSQL1和txtSQL2同时查询,当组合框combo3(1)选中的时候txtSQL1、txtSQL2、txtSQL3三行条件一起查询。

      2、当字段名是性别的时候操作符中的符号只能是“=”和“< >”并且提示只能输入“男” 或“女”。当字段名为时间或者是日期的时候,combo2(1)要有限制只能输入日期或者是时间,这个还需要在后续的优化中继续完善;

     3、注意:组合查询combo3(0)为空的时候txtSQL2不能点击输入,只有单击combo3(0)的时候txtSQL2才能用;


【机房收费系统】-查询


代码展示:

查询代码展示

Private Sub cmdInquire_Click()
    
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset    
    
    '定义三个字符串,表示三种查询条件
    Dim txtSQL1 As String '第一种查询条件
    Dim txtSQL2 As String '第二种查询条件
    Dim txtSQL3 As String '第三种查询条件

    '在line_info表中获得整行记录,*表示查询的记录
    txtSQL = "select * from student_info where"
    txtSQL1 = txtSQL & " " & field(Combo1(0).Text) & " " & (Combo2(0).Text) & "'" & Trim(Text1.Text) & "'"
    txtSQL2 = txtSQL1 & " " & field(Combo3(0).Text) & " " & field((Combo1(1).Text)) & " " & Combo2(1).Text & "'" & Trim(Text2.Text) & "'"
    txtSQL3 = txtSQL2 & " " & field(Combo3(1).Text) & " " & field(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text3.Text) & "'"

    '第一行查询条件
    If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1.Text) = "" Then
        MsgBox "请输入完整的查询条件!", vbOKOnly, "提示"
        Exit Sub
    Else
        txtSQL = txtSQL1
        Set mrc = ExecuteSQL(txtSQL, MsgText)
    End If

    '判断组合关系框是否填写,两行查询条件
    If Combo3(0).Text <> "" Then
        '判断第二行内容是否完整,且符合要求
        If Combo1(1).Text = "" Or Combo2(1).Text = "" Or Text2.Text = "" Then
            MsgBox "请将第二个查询条件内容填写完整!", vbOKOnly, "提示"
            Exit Sub
        Else
            '将前两行条件联系起来完成SQL语句
            txtSQL = txtSQL2
            Set mrc = ExecuteSQL(txtSQL, MsgText)
        End If
    End If

    '判断第二个组合关系是否选中,三行查询条件
    If Combo3(1).Text <> "" Then

        '如果选中,判断第二行内容是否填写完整,且符合要求
        If Combo1(2).Text = "" Or Combo2(2).Text = "" Or Text3.Text = "" Then
            MsgBox "请将第三行查询条件内容填写完整!", vbOKOnly, "提示"
            Exit Sub
        Else
            '将三行的条件联系起来,完成SQL语句
            txtSQL = txtSQL3
            Set mrc = ExecuteSQL(txtSQL, MsgText)
        End If
    End If
    
    If mrc.EOF Then
        MsgBox "查询无信息,请重新选择查询条件!", vbOKOnly + vbInformation, "提示信息"
        Exit Sub
    End If
    
    '获得表中数据表头
    With MSHFlexGrid1
        .ColAlignment(-1) = 4
        .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) = "类型"
        .TextMatrix(0, 9) = "日期"
        .TextMatrix(0, 10) = "时间"
    
    '循环执行,直到最后一个记录
    Do While Not mrc.EOF
        .Rows = .Rows + 1   '防止空白行出现
        .CellAlignment = 4
        .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(2))
        .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(0))
        .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(4))
        .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(5))
        .TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(6))
        .TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(3))
        .TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(10))
        .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(8))
        .TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(14))
        .TextMatrix(.Rows - 1, 9) = Trim(mrc.Fields(12))
        .TextMatrix(.Rows - 1, 10) = Trim(mrc.Fields(13))
        mrc.MoveNext
    Loop
    MsgBox "条件查询结束", vbOKOnly + vbExclamation, "提示!"        
    mrc.Close
End With
End Sub


注意:

      1、字段名与数据库中的列名相对应,将字段名转化为数据库语言,查询识别;

      2、借助模块和循环语句,减少代码量;

      3、代码输入过程还是要仔细,单引号双引号少一个都会出现不一样的问题;

           单引号是sql查询语句中表示一个字符串的开始结束的符号;双引号是VB语言字符串表示字符串开始结束的符号;


小结:

     做的时候还是要走心,理清思路,一步步完善;