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

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

      


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

     

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

    

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

   

                          '判断日期和时间的格式是否正确
    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 If
    
  这还有一个很重要的问题值得我们了解:就是当我们查询卡号的时候当我们输入的内容是一位数的时候,我们总是能查出我们需要的正确的结果,但是当我们输入多位数的时候就会出错了,比如下面这种情况:

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

   小结:

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

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值