机房收费系统(三)—再看组合查询

写在前面

组合查询顾名思义是多条件查询,关键就是确定在一定的条件下需要查询与这个条件想对应的内容,确定好查询内容之后,每一次查询都是在上一个条件基础上加一个条件的查询。


下面就看一下机房中复合查询值的关注的地方。

过程:

1.向combobox控件中填充信息

我在添加的时候就是一个个地添加,结果写了好长的代码,在这里值得学习是设置控件数组,利用索引来设置循环往控件里添加信息,具体的代码如下:

Private Sub Form_Load()
 Dim i, j, k
 Me.Height = 10185
 Me.Width = 15135
 Label1.Caption = "输入查询条" & Chr(13) & Chr(10) & "件(请在下" & Chr(13) & Chr(10) & "拉)菜单中" & Chr(13) & Chr(10) & "选择"
 
 '用循环语句向combobox中填充信息
 For i = 0 To 2
     With combo1(i)
         .AddItem "卡号"
         .AddItem "学号"
         .AddItem "姓名"
         .AddItem "性别"
         .AddItem "系别"
         .AddItem "年级"
         .AddItem "班级"
      End With
  Next i
  
  For j = 0 To 2
      With Combo2(j)
         .AddItem "="
         .AddItem "<"
         .AddItem ">"
         .AddItem "<>"
       End With
   Next j
   
   For k = 0 To 1
       With Combo3(k)
          .AddItem "与"
          .AddItem "或"
       End With
   Next k
  
End Sub


2.判断查询条件是否为空,定义了一个testtxt函数,当被查询的内容为空,则testtxt的值为false,否则为true.最后把值赋给isempty变量,这样就不需要一个个挨着判断了,不足之处就是用户会不知道该去填写哪个查询条件。

定义了一个testtxt函数用于判断被判断的内容是否为空

'定义一个检查文本框是否为空的函数
Public Function testtxt(txt As String) As Boolean         '参数是txt,即文本框内容
    If Trim(txt) = "" Then
       testtxt = False
    Else
       testtxt = True
    End If
End Function

把判断结果返回给isempty,这样一下子就可以判断几个文本框或comboboxl里的内容是否为空。

'判断查询条件是否为空,用到了函数
    isempty0 = testtxt(combo1(0).Text) Or testtxt(Combo2(0).Text) Or testtxt(txtinquire(0).Text)
    If isempty0 = False Then
       MsgBox "请输入查询条件", vbOKOnly, "提示"
       Exit Sub
    End If
    
    If Combo3(0).Text <> "" Then
       isempty1 = isempty0 Or testtxt(combo1(1).Text) Or testtxt(Combo2(1).Text) Or testtxt(txtinquire(1).Text)
       If isempty1 = False Then
          MsgBox "请输入查询条件", vbOKOnly, "提示"
       Exit Sub
       End If
      'Exit Sub
    End If
      
    If Combo3(1).Text <> "" Then
       isempty2 = isempty0 Or isempty1 Or testtxt(Combo3(0).Text) Or testtxt(combo1(2).Text) Or testtxt(Combo2(2).Text) Or testtxt(txtinquire(2).Text)
       If isempty2 = False Then
          MsgBox "请输入查询条件", vbOKOnly, "提示"
          Exit Sub
       End If
    End If


3.将汉字转换成数据库中的字段名,自定义函数fieldname函数,如果直接用汉字表示的话,系统识别不出来。
'把汉字转换成数据库中的字段名,可以自定义一个fieldname函数实现
  Private Function fieldname(strfieldname As String) As String
      Select Case strfieldname
          Case "卡号"
             fieldname = "cardno"
          Case "学号"
             fieldname = "studentno"
          Case "姓名"
             fieldname = "studentname"
          Case "性别"
             fieldname = "sex"
          Case "系别"
             fieldname = "department"
          Case "年级"
              fieldname = "grade"
          Case "班级"
              fieldname = "class"
       End Select
  End Function
  
  Private Function fieldname1(strfieldname As String) As String
       Select Case strfieldname
          Case "与"
             fieldname1 = "and"
          Case "或"
             fieldname1 = "or"
       End Select
  End Function

4.组合条件的查询,到这里的时候像热锅上的蚂蚁,不知道怎么是好,现在把思路理清楚了,感觉没有那么麻烦了

遇到的问题:

(1).没有理清楚思路,每个下拉列表框那么多的条件,不知道该怎么去写代码了,另外一方面要判断查询条件是否为空,条件很多,一时没有找到好的解决方法,另一方面要确定查询的内容组合,把这两部分掺杂在了一起,没有分成小的模块,思路没有清楚。

(2).没有想到复合查询其实就是在上一个条件基础上的查询。


其实符合查询在敲学生信息管理系统的时候用到过,现在就来看看学生与机房在组合查询上的区别以及共同之处吧,方便更好地学习。

学生信息管理系统:

这是学生中查询成绩信息的窗体:



代码:

首先写txtsql查询语句

txtSQL = "select * from result_info where "


一个条件的查询:当1中有学号信息时

If Check(0).Value Then
       If Trim(Txtsid.Text) = "" Then
           MsgBox "学号不能为空", vbOKOnly + vbExclamation, "提示"
           Txtsid.SetFocus
           Exit Sub
        Else
           dd(0) = True     '作标记,第一个条件被选中
           txtSQL = txtSQL & "student_id= '" & Trim(Txtsid.Text) & "'"
         End If
     End If

两个条件的查询:2中有姓名信息时

If Check(1).Value Then
         If Trim(txtname.Text) = "" Then
             MsgBox "姓名不能为空", vbOKOnly + vbExclamation, "提示"
             txtname.SetFocus
             Exit Sub
          Else
            dd(1) = True
            If dd(0) = True Then    '如果第一个条件也被选中
               txtSQL = txtSQL & " and student_name= '" & txtname.Text & "'"
             Else                    '第一个条件没有被选中,只选中了第二个条件
                txtSQL = txtSQL & "student_name= '" & txtname.Text & "'"
             End If
           End If
      End If

三个条件的查询:3中有课程信息时

If Check(2).Value Then
          If Trim(txtcourse.Text) = "" Then
             MsgBox "课程不能为空!", vbOKOnly + vbExclamation, "提示"
             txtcourse.SetFocus
             Exit Sub
           Else
              dd(2) = True                   '第三个条件被选中
              If dd(0) Or dd(1) Then         '第一个条件或者第二个条件被选中
                  txtSQL = txtSQL & "and course_name= '" & txtcourse.Text & "'"
               Else                          '前两个条件都没有被选中
                   txtSQL = txtSQL & "course_name= '" & txtcourse.Text & "'"
               End If
             End If
       End If


机房收费系统:

以学生基本信息维护窗体为例:


当没有4与5的时候,只对1条件进行查询,当4中有组合关系时,对1和2两个条件进行组合查询,当5中有组合关系时,对1,2,3三个条件进行组合查询。

代码如下:

   '一个条件的查询
   txtsql = "select * from student_info where " & fieldname(combo1(0).Text) & Combo2(0).Text & "'" & Trim(txtinquire(0).Text) & "'"
  
   If Combo3(0).Text <> "" Then
      '添加第二个条件的查询
       txtsql = txtsql & fieldname1(Combo3(0).Text) & " " & fieldname(combo1(1).Text) & Combo2(1).Text & "'" & Trim(txtinquire(1).Text) & "'"
   End If
 
   If Combo3(1).Text <> "" Then
      '添加第三个条件的查询
      txtsql = txtsql & fieldname1(Combo3(1).Text) & " " & fieldname(combo1(2).Text) & Combo2(2).Text & " '" & Trim(txtinquire(2).Text) & "'"
   End If
   
   Set mrc = executesql(txtsql, msgtext)
   


经过与学生信息管理系统进行对比,我们会发现组合查询其实没有实质性的区别,复合查询都是在上一个条件的基础上加一个条件的查询。


总结:

思想:学习过程中颗粒归仓,及时总结,多寻找联系,多建立联系,每遇到一个完全陌生的问题的时候,要想以前是否遇见过,要相信用于都没有孤立的知识单独存在,建立知识网。另外在写程序之前一定要先理清思路。

技术:对于复杂,重复的操作,我们可以定义一个函数实现,用的时候直接调用该函数就可以,提高程序的复用性。对于多条件的查询,把复杂问题简单化,化成在原来基础上加一个条件的查询。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗琪小姐姐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值