机房收费系统问题集(4)——指定时间段数据查询+组合查询

本文介绍了如何在机房收费系统中实现指定时间段数据查询和组合查询。通过使用DTPicker控件进行时间选择,并利用DateDiff函数、IsNull函数以及CDate函数进行数据过滤。同时,文章讲解了如何在学生基本信息维护等窗体中实现组合查询,包括将人类语言转化为计算机语言、空值检查和操作符设置,以此提高查询效率和准确性。
摘要由CSDN通过智能技术生成

    最近一直处在“攻坚”阶段,指定时间段数据查询和组合查询两座大山终于拿下,现在整理一下,也不枉我的苦心经营了......奋斗

(1)指定时间段数据查询

首先添加DTPicker控件,这是个非常强大的控件,早知道有它,我肯定赚到好多时间......



然后在你需要的地方画出来,它刚刚画出来的样式虽然很普通,但是,运行后,你会大吃一惊的


既能选择你想要的时间,又能立马回到今天,有木有很强大吐舌头

重点是两个时间段内的数据查询,写入下面的代码,哈哈,尽情的查吧

<pre name="code" class="vb"><strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub cmdchaxun_Click()
Dim txtsql As String
Dim msgtext As String
Dim mrc As ADODB.Recordset
Dim startdate As Date
Dim enddate As Date

startdate = DTPicker1.Value
enddate = DTPicker2.Value

txtsql = "select * from Recharge_Info where date >='" & startdate & "' and date <='" & enddate & "'"
Set mrc = executesql(txtsql, msgtext)
'比较两个日期的大小
If DateDiff("d", CDate(startdate), CDate(enddate)) < 0 Then
   MsgBox "起始日期不能小于终止日期!", vbOKOnly + vbExclamation, "警告"
   Exit Sub
End If

If mrc.EOF Then
      MsgBox "没有数据!", vbOKOnly + vbExclamation, "警告"
      Exit Sub
End If

 With myflexgrid
        .CellAlignment = 4
        .Rows = 1
        .TextMatrix(0, 0) = "卡号"
        .TextMatrix(0, 1) = "充值金额"
        .TextMatrix(0, 2) = "充值日期"
        .TextMatrix(0, 3) = "充值时间"
        .TextMatrix(0, 4) = "充值教师"
        .TextMatrix(0, 5) = "结账状态"
Do While Not mrc.EOF
        .CellAlignment = 4
        .Rows = .Rows + 1
        .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(2))
        .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(3))
        .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(4))
        .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(5))
        .TextMatrix(.Rows - 1, 4) = Trim(username)
        If IsNull(mrc.Fields(7)) = False Then
           .TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(7))
        Else
           .TextMatrix(.Rows - 1, 5) = ""
        End If
        mrc.MoveNext
   
Loop
End With
mrc.Close</span></strong>


 
在代码中间用到了三个函数:DateDiff函数、IsNull函数和CDate函数 

DateDiff函数:表达式:DateDiff(timeinterval,date1,date2 [, firstdayofweek [,                                      firstweekofyear]])                     

              允许数据类型::timeinterval 表示相隔时间的类型,代码为:                     

              年份 yy、yyyy 季度 qq、q                     

              月份 mm、m                    

              每年的某一日 dy、y                     

              日期 dd、d                     

              星期 wk、ww                    

              工作日 dw                     

              小时 hh                     

              分钟 mi、n                     

              秒 ss、s                     

              毫秒 ms

IsNull函数:IsNull是一个内部函数,判断参数对象是否为空(指出表达式是否不包含任何有效数据),若是,返回true,否则返回false. 

CDate函数:CDate(date)返回表达式,此表达式已被转换为 Date 子类型的 Variant。

           CDate 根据系统的区域设置识别日期格式。如果数据的格式不能被日期设置识别,则不能判断                年、月、日的正确顺序。另外,如果长日期格式包含表示星期几的字符串,则不能被识别。

(2)组合查询

    在机房收费系统中有三个用到组合查询的窗体:学生基本信息维护,学生上机统计信息查询,操作员工作记录,现在以学生基本信息维护为例

首先在模块中将人类语言转换成计算机可以懂的语言,以便于查询

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Public Function FiledName(StrFiledName As String) As String
    Select Case StrFiledName
    Case "卡号"
         FiledName = "cardno"
    Case "学号"
         FiledName = "studentno"
    Case "姓名"
         FiledName = "studentname"
    Case "性别"
         FiledName = "sex"
    Case "学院"
         FiledName = "department"
    Case "年级"
         FiledName = "grade"
    Case "班级"
         FiledName = "class"
    End Select</span></strong>
<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">End Function
</span></strong>

再在模块中添加判断是否为空的代码(学生信息管理系统中也用到了)

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Public Function testtxt(txt As String) As Boolean
'判断输入内容是否为空
If Trim(txt) = "" Then
     testtxt = False
Else
     testtxt = True
End If
End Function
</span></strong>

然后设置操作符,卡号,学号可以有“<”和“>”,可是姓名,性别,系别,年级不能有,于是乎,在每个字段的click事件下添加下面的代码:

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub Comboziduan1_Click()
     
     Combocaozuo1.Clear '添加后就没有重复的操作符了
     
    Select Case Comboziduan1.Text
           Case "卡号"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<"
                Combocaozuo1.AddItem ">"
                Combocaozuo1.AddItem "<>"
           Case "学号"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<"
                Combocaozuo1.AddItem ">"
                Combocaozuo1.AddItem "<>"
           Case "姓名"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<>"
           Case "性别"
                MsgBox "请输入“男”或“女”!", vbOKOnly + vbExclamation, "提示"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<>"
           Case "系别"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<>"
           Case "年级"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<>"
           Case "班级"
                Combocaozuo1.AddItem "="
                Combocaozuo1.AddItem "<>"
    End Select
End Sub</span></strong>

再在“查询”的按钮的click事件中添加下面的代码:

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub cmdchaxun_Click()
    Dim txtsql As String
    Dim msgtext As String
    Dim mrc As ADODB.Recordset
    
    txtsql = "select * from student_Info where "
  
    '判断字段是否为空
    If Not testtxt(Trim(Comboziduan1.Text)) Then
       MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "警告"
       Comboziduan1.SetFocus
       Exit Sub
    End If
    '判断操作符是否为空
    If Not testtxt(Trim(Combocaozuo1.Text)) Then
       MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
       Combocaozuo1.SetFocus
       Exit Sub
    End If
    '判断查询内容是否为空
    If Not testtxt(Trim(txtchaxun1.Text)) Then
       MsgBox "请输入要查询的内容!", vbOKOnly + vbExclamation, "警告"
       txtchaxun1.SetFocus
       Exit Sub
    End If
    
    txtsql = txtsql & FiledName(Comboziduan1.Text) & " " & Combocaozuo1.Text & "'" & txtchaxun1.Text & "'"
 
    '开始组合
    If Trim(Combozuhe1.Text <> "") Then
       If Trim(Comboziduan2.Text) = "" Or Trim(Combocaozuo2.Text) = "" Or Trim(txtchaxun2.Text) = "" Then
          MsgBox "您选择了第一个组合关系,请输入完整的信息后再查询!", vbOKOnly + vbExclamation, "提示"
          Exit Sub
       Else
          txtsql = txtsql & FiledName(Combozuhe1.Text) & " " & FiledName(Comboziduan2.Text) & Combocaozuo2.Text & "'" & Trim(txtchaxun2.Text) & "'"
    
       End If
    End If
    
    If Trim(Combozuhe2.Text) <> "" Then
       If Trim(Comboziduan3.Text) = "" Or Trim(Combocaozuo3.Text) = "" Or Trim(txtchaxun3.Text) = "" Then
          MsgBox "您选择了第二个组合关系,请输入完整的信息后再查询!", vbOKOnly + vbExclamation, "警告"
          Exit Sub
       Else
         txtsql = txtsql & FiledName(Combozuhe2.Text) & " " & FiledName(Comboziduan3.Text) & Combocaozuo3.Text & "'" & Trim(txtchaxun3.Text) & "'"
     
       End If
   End If
   
   
   '开始查询
   Set mrc = executesql(txtsql, msgtext)
   
   If mrc.EOF Then
      MsgBox "没有您要查找的学生,请重新查询!", vbOKOnly + vbExclamation, "警告"
   Else
      With myflexgrid
             .Rows = 1
             .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) = "金额"
             .TextMatrix(0, 8) = "备注"
             .TextMatrix(0, 9) = "状态"
             .TextMatrix(0, 10) = "日期"
             .TextMatrix(0, 11) = "时间"
             .TextMatrix(0, 12) = "类型"
       End With
           
     Do While Not mrc.EOF
         With myflexgrid
              .Rows = .Rows + 1
              .CellAlignment = 4
              .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(0))
              .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(1))
              .TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(2))
              .TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(3))
              .TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(4))
              .TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(5))
              .TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(6))
              .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(7))
              .TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(8))
              .TextMatrix(.Rows - 1, 9) = Trim(mrc.Fields(10))
              .TextMatrix(.Rows - 1, 10) = Trim(mrc.Fields(12))
              .TextMatrix(.Rows - 1, 11) = Trim(mrc.Fields(13))
              .TextMatrix(.Rows - 1, 12) = Trim(mrc.Fields(14))
        End With
        mrc.MoveNext
    Loop
 End If </span></strong>
<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">mrc.Close  
End Sub</span></strong>
    OK,大功告成,查询一下吧,是不是感觉超厉害(其实代码中我还有不懂的地方,还在摸索中奋斗,希望大家多多提建议,共同加油!!!)

    没有做不到,只有想不到,怀着全心全意为人民服务的赤诚之心,没有做不好的事情!!!小伙伴们,好好加油!!!




评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值