【机房收费系统——组合查询】

简介: 【机房收费系统——组合查询】

先来说说我们普遍存在的一种心理,就是我们看到组合查询的那个界面的时候我们当时就被自己给打死了,我们的第一反应就是这是个什么东西,这么多的框框,所以就给组合查询蒙上了一层 “很难”的面纱,但是当我们仔细想想我们好像在那见过这样的知识。仔细想想,,,,,,终于在记忆深处找到了一点安慰,那就是学生信息管理系统中的这个界面(回忆旧识):

20140826202930627.png20140826203320493.png



相当这我们的心情应该大好啊!这就给我们提供了很好的思路,这就是个小组合查询啊。下面说说我的组合查询思路:

   

20140826212734019.jpg

最后两个组合框是选择组合关系的(与  或),同时在我的代码中它们关系着它们下面的控件是否可以为空。也就是说如果我们查询的包含一个条件,我们应该填写在第一行中,如果我们选择了一个组合关系的文本框中,那么下面的控件框就不能为空,具体代码如下:

 

   txtSQL = "select * from line_Info where "
    '判断字段的选择是否为空
    If combfiled(0).Text = "" Then
        MsgBox "请选择字段!", vbOKOnly + vbExclamation, "警告"
        combfiled(0).SetFocus
        Exit Sub
    End If
                                             '判断操作符的选择是否为空
    If comboperate(0).Text = "" Then
        MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
        comboperate(0).SetFocus
        Exit Sub
    End If
    '判断要查询的内容是否为空
    If txtcontent(0).Text = "" Then
        MsgBox "请在输入要查询的内容", vbOKOnly + vbExclamation, "警告"
        txtcontent(0).SetFocus
        Exit Sub
    End If
    txtSQL = txtSQL & ZhuangHuan(combfiled(0).Text) & " " & comboperate(0).Text & "'" & txtcontent(0).Text & "'"
    '利用模版函数查看是否是组合查询第一行为空时,查询无效
    '开始组合查询
    If Trim(combrelation(0).Text <> "") Then
        If Trim(combfiled(1).Text) = "" Or Trim(comboperate(1).Text) = "" Or Trim(txtcontent(1).Text) = "" Then
            MsgBox "您选择了组合关系,请输入数据之后再查询", vbOKOnly, "提示信息"
            Exit Sub
        Else
            txtSQL = txtSQL & ZhuangHuan(combrelation(0).Text) & " " & ZhuangHuan(combfiled(1).Text) & comboperate(1).Text & "'" & Trim(txtcontent(1).Text) & "'"
        End If
    End If
    If Trim(combrelation(1).Text) <> "" Then
        If Trim(combfiled(2).Text) = "" Or Trim(comboperate(2).Text) = "" Or Trim(txtcontent(2).Text) = "" Then
            MsgBox "您选择了第二个组合,请输入数据之后在查询", vbOKOnly, "提示"
            Exit Sub
        Else
            txtSQL = txtSQL & ZhuangHuan(combrelation(1).Text) & " " & ZhuangHuan(combfiled(2).Text) & comboperate(2).Text & "'" & Trim(txtcontent(2).Text) & "'"
        End If
    End If
                                                 '开始进行查找
    Set mrc = ExecuteSQL(txtSQL, MsgText

到这我们的查询的主要代码就可以了。


当然这样我们的代码还是不能运行,因为我们的组合框中是填写的汉字所以我们需要一个转换函数,把我们控件框中的汉字转换成符号.

Public Function ZhuangHuan(StrZhuangHuan As String) As String
    Select Case StrZhuangHuan
    Case "卡号"
        ZhuangHuan = "cardno"
    Case "姓名"
        ZhuangHuan = "studentname"
    Case "上机日期"
        ZhuangHuan = "ondate"
    Case "上机时间"
        ZhuangHuan = "ontime"
    Case "下机日期"
        ZhuangHuan = "offdate"
    Case "下机时间"
        ZhuangHuan = "offtime"
    Case "消费金额"
        ZhuangHuan = "consume"
    Case "余额"
        ZhuangHuan = "cash"
    Case "与"
        ZhuangHuan = "and"
    Case "备注"
        ZhuangHuan = "status"
    Case "或"
        ZhuangHuan = "or"
    End Select
End Functio

下面是我们这个窗体中一些需要我们在优化的时候需要注意的事情,像我们在按日期查询的时候,我们的格式必须正确,如果不按正确的格式就会报错。这就需要下面的代码来给我们增加提示:

                          '判断日期和时间的格式是否正确
    If combfiled(0).Text = "上机日期" Or combfiled(0).Text = "上机时间" Or combfiled(0).Text = "下机日期" Or combfiled(0).Text = "下机时间" Then
        If Not IsDate(txtcontent(0).Text) Then
            MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示"
                Exit Sub
            End If
        End If
    If combfiled(1).Text = "上机日期" Or combfiled(1).Text = "上机时间" Or combfiled(1).Text = "下机日期" Or combfiled(1).Text = "下机时间" Then
    If Not IsDate(txtcontent(1).Text) Then
        MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
    End If
If combfiled(2).Text = "上机日期" Or combfiled(2).Text = "上机时间" Or combfiled(2).Text = "下机日期" Or combfiled(2).Text = "下机时间" Then
    If Not IsDate(txtcontent(2).Text) Then
        MsgBox "请输入正确的日期或时间格式", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
    End I


这还有一个很重要的问题值得我们了解:就是当我们查询卡号的时候当我们输入的内容是一位数的时候,我们总是能查出我们需要的正确的结果,但是当我们输入多位数的时候就会出错了,比如下面这种情况:


当我们查询的条件是小于3的时候,像12  24等第一位小于3的所有数都会出现:出现这种问题的原因是:卡号是字符型的数据,在比较的时候比的是ASCII码的的大小,并且只要有好符合条件的数字就不会再往后比较。其余的就是一些很小的问题,需要我们自己细心的修改。


小结:


其实当我们有了学生中的那个基础,到这我们就可以用一句话来概括,就是字符串 的拼接,之中出现的错误没有什么难的逻辑错误,都是我们的SQL语句出现错误,只有我们有足够的耐心和细心,我们会很轻松的搞定这个问题。

目录
相关文章
|
1月前
|
关系型数据库 MySQL
Mysql基础第十七天,使用子查询
Mysql基础第十七天,使用子查询
17 0
|
16天前
|
关系型数据库 MySQL 定位技术
解谜MySQL索引:优化查询速度的不二法门
解谜MySQL索引:优化查询速度的不二法门
16 0
|
1月前
|
关系型数据库 MySQL
Mysql基础第二十天,组合查询
Mysql基础第二十天,组合查询
16 0
Mysql基础第二十天,组合查询
|
9月前
机房收费系统—组合查询逻辑分析
机房收费系统—组合查询逻辑分析
|
9月前
|
数据库
机房收费系统——学生基本信息维护(组合查询,选中整行)
机房收费系统——学生基本信息维护(组合查询,选中整行)
40 0
机房收费系统——学生基本信息维护(组合查询,选中整行)
|
10月前
|
存储 SQL 数据库
【机房重构】组合查询—存储过程
【机房重构】组合查询—存储过程
28 0
|
11月前
|
SQL 监控 算法
查询需求闻风而来,联表查询知多少?逐步解剖它
查询需求闻风而来,联表查询知多少?逐步解剖它
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
本篇文章讲解的主要内容是:***目前Oracle支持的行列互换有两种方式:case when、pivot\unpivot,我将通过几个案例来给大家详解如何通过这两种方式实现“行转列”,“列转行”的需求,并通过执行计划看case when、pivot\unpivot二者的底层逻辑关系以及效率上的影响。***
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
|
存储 设计模式 算法
【机房重构】——模板方法解决组合查询
【机房重构】——模板方法解决组合查询
38 0
【机房重构】——模板方法解决组合查询
|
数据库
机房收费系统之组合查询
机房收费系统之组合查询
机房收费系统之组合查询