机房收费系统的 两个插曲

来源:互联网 发布:ae cc 2014 mac 破解 编辑:程序博客网 时间:2024/05/16 05:47

日结账的上期充值余额的算法

   对于这个日结账一开始我是糊涂了,弄得余额不是多了就是少了,有时候还的重复好多次。好乱。而且他那个系统原来的每天可能有好多次结账,这样就造成了数据的冗余。不必要的空间资源浪费了

    想了一些方法,又看了看其他人的一些做法,最后做了一天只能有一次的结账,如果今天已经结账了,那么就把上午的余额给下午,删除上午,如果没有结账,那么就把昨天或最近一天的余额给今天。

    部分代码如下

       

txtSQL = "select * from checkDay_info where date='" & Format(Date, "yyyy-mm-dd") & "'" '查找上期余额    Set ObjCheckDay = ExecuteSQL(txtSQL, MsgText) '打开学生表     If ObjCheckDay.EOF = True Then '查询今天记录,如果记录为空,释放,然后徐获取最近的最新余额    txtSQL = "select * from checkDay_info where date<='" & Format(Date, "yyyy-mm-dd") & "'" '查找上期余额     Set ObjCheckDay = ExecuteSQL(txtSQL, MsgText) '打开学生表        For ObjDay = 0 To ObjCheckDay.RecordCount - 1 '记录集循环                   Upremain = ObjCheckDay.Fields("allCash") '获取上期余额                   ObjCheckDay.MoveNext '记录集下移         Next     Else                        txtSQL = "select * from checkDay_info where date='" & Format(Date, "yyyy-mm-dd") & "'" '查找上期余额           Set ObjCheckDay = ExecuteSQL(txtSQL, MsgText) '打开学生表            Upremain = ObjCheckDay!upRemainCash  '获取今天最新余额            ObjCheckDay.Delete '记录集下移       End If 

文本框的回车事件,怎样设置回车后就上机,在回车后就下机呢?

   开始也为这个反头痛呢,后来发现只是个纸老虎,细细想想也就是那么了,打开一个表查询下,看看,不在就下机,在就上机了。

   部分代码如下

 

If KeyAscii = 13 Then            txtSQL = "select * from student_info where car_ID='" & Trim(txtCarID.Text) & "'" & " and statue='使用'"            Set Objstudent = ExecuteSQL(txtSQL, MsgText) '打开学生表            If Objstudent.EOF = True Then '如果卡号不存在,提示                MsgBox "此卡未注册,请重新输入", vbOKOnly + vbInformation, "警告"                Exit Sub          Else                txtSQL = "select * from lineon_info where car_ID='" & Trim(txtCarID.Text) & "'" '查询上机表                 Set Objlineon = ExecuteSQL(txtSQL, MsgText) '打开上机表                If Objlineon.EOF = False Then '如果此卡正在上机,提示                     cmdOutline.Value = True '提示下机                Else                    cmdOnline.Value = True '提示下机                End If         End If   End If

 使用聚合函数

首先说明何为聚合函数,这是SQL语句中针对字段内数据在集合中的计算方式。此处的集合就是查询结果。语句如下

SQLMAX( orders.OrderDate) as 最后交易日 from orders

以上的语句表示orders数据表中驱车orderdate的最大值,max是函数,它后面的“最后交易日”是字符按,也就是此列中最大值。这是所有聚合函数的共同设计方式。

分组依据

 除了多个聚合函数外,合计中分分组,表达式和条件都有特殊表示法

  sum(orders.total) as 交易总额 from ordres inner JOin(ordrs。Canceldate is null) group by membres.memberID

 

以上语句中,表示MemberID字段作为分组,并取出MemberID和另外两个经过计算的结果,分别是OrderID
字段做count计算和以totals字段做sum 计算,最后再以where设置canceldate字段不可以是空白的条件。

这一句的基本格式是

Select 计算方式(取出的字段)....from数据表where 条件 group by 分组字段

原创粉丝点击