机房收费系统之组合查询

前言:

组合查询是机房的另一个重点;涉及到的窗体有:学生基本信息维护、学生上机信息统计、操作员工作记录。


逻辑:

这里写图片描述


问题及重点代码:

1.调用函数的目的是使得汉字与表中字段进行转化
例:sql语句的姓名应该是student Name,而代码中添加的是文字(Combo3.AddItem “姓名”)通过函数可以将两者进行转化
2.表中信息清空:
通过加入MSHFlexGrid1.Clear可以清空
3.实时错误”3021”的四种情况:
(出现这种错误就可以按照这四种情况一一进行排除)

1).查找的数据库记录为空..可以用 rs.RecordCount 来判断数据是否等于0
2).查找到数据后,用 Del 命令删除记录后,再引用 Fields 后会出现错误.
3).已经用MoveFirst 或用 MovePrevious 命令 移动至数据库开始后再用 MovePrevious 命令.
4).已经用MoveLast 或用 MoveNext 命令 移动至数据库开始后再用 MoveNext 命令.
感觉前两种比较常见,通过添加如下代码可以解决:

If mrc.EOF Then
        MsgBox "查询不到内容!"
Exit Sub
End If

4.错误”94” 为Null
在出错的地方加入 & ” “就可以解决;意思是或者为空值。


定义的函数代码如下:

Public Function field(i As String) As String
    Select Case i
        Case "卡号"
    field = "cardno"
    ...

        Case "余额"
    field = "recharge"

        Case "或"
    field = "or"
        Case "与"
    field = "and"
    End Select
End Function

    If Trim(Combo1.Text) = "" Or Trim(Combo2.Text) = "" Or Trim(Text1.Text) = "" Then
        MsgBox "请将第一行内容填写完整!", vbOKOnly, "提示"
    Exit Sub
    Else
        txtSQL = txtSQL & " " & field(Combo1.Text) & Combo2.Text & "'" & Trim(Text1.Text) & "'"

        If Combo7.Text <> "" Then '判断第一个组合关系是否选中

        If Combo3.Text = "" Or Combo4.Text = "" Or Text2.Text = "" Then
            MsgBox "请将第二行内容填写完整!", vbOKOnly, "提示"
        Exit Sub
        Else
            txtSQL = txtSQL & "" & field(Combo7.Text) & " " & field(Combo3.Text) & Combo4.Text & "'" & Text2.Text & "'"
            If Combo8.Text <> "" Then
            If Combo5.Text = "" Or Combo6.Text = "" Or Text3.Text = "" Then
                MsgBox "请将第三行内容填写完整!", vbOKOnly, "提示"
                Exit Sub
                Else
            txtSQL = txtSQL & "" & field(Combo8.Text) & " " & field(Combo5.Text) & Combo6.Text & "'" & Text3.Text & "'"
                '将前三行的条件联系起来
                End If
            End If
        End If
    End If
End If       

        txtSQL = "select * from line_Info" & " where" & txtSQL
        Set mrc = ExecuteSQL(txtSQL, MsgText)

        If mrc.EOF Then
            MsgBox "查询不到内容!"
        Exit Sub
        End If

    '将查询内容显示在表格控件中
    With MSHFlexGrid
    .Rows = 2    '2行
    .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) = "余额"
     '判断是否移动到数据集对象的最后一条记录
     Do While Not mrc.EOF
    .Rows = .Rows + 1
    .CellAlignment = 4
    .TextMatrix(.Rows - 2, 0) = mrc.Fields(0)
    .TextMatrix(.Rows - 2, 1) = mrc.Fields(2)
    .TextMatrix(.Rows - 2, 2) = mrc.Fields(5)
    .TextMatrix(.Rows - 2, 3) = mrc.Fields(6)
    .TextMatrix(.Rows - 2, 4) = mrc.Fields(7)
    .TextMatrix(.Rows - 2, 5) = mrc.Fields(8)
    .TextMatrix(.Rows - 2, 6) = mrc.Fields(10) & " "
    .TextMatrix(.Rows - 2, 7) = mrc.Fields(11)
    '移动到下一条记录
    mrc.MoveNext
    Loop
End With
mrc.Close

总结:
个人觉得组合查询就是一条SQL语句。

txtSQL = “select * from line_Info” & ” where” & txtSQL
txtSQL = txtSQL & ” ” & field(Combo1.Text) & Combo2.Text & “’” & Trim(Text1.Text) & “’”
比如:通过第一行查询姓名为1的所有信息。
field(Combo1.Text)就是姓名(SQL语句中汉字无法识别,通过函数转化为student_Name),Combo2.Text就是”=”,Trim(Text1.Text)就是1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值