前言:
这个部分确实让我花费了不少心血呢,当然收获也真是不少。知道有自动下机这么回事是在第一次验收机房收费系统的时候,浩东问我弄没弄自动下机那一块儿,这我才知道还有这么一个模块儿,顿时……好尴尬,又有好玩儿的了,哈哈
因为我之前也有对于余额不足的限制,只不过是在退卡时加了限制,我实现的是,退卡时查看,若余额不足,无法退卡,但师父说,那我就不退卡了,不行么?我就直接走人,我说,好,师父,你够任性。
那我还是乖乖做自动下机好啦
过程:
那我就开始画流程图
(这不,这是我的手稿,感觉思路还是挺清楚的,我就开始写代码,但我的代码经过断点调试,没有实现每个卡号都查,原因是我的误区是误以为有了timer事件就可以高枕无忧了,我没有计算时间,而是直接按照一分钟算钱,这样的错误,使得我无法正常的让每个卡号都自动更新余额)
这之中为了解决这个问题,请教了多位长老,也和牛哥聊了很久,在代码,思维上,有了新的认识,在这里感谢各位大牛的指点。
这是正确的代码:
'先判断是否有卡号上机,查询上机表
txtSQL = "select * from online_info"
Set mrc = ExecuteSQL(txtSQL, msgtext)
'判断是否有卡号正在上机
If mrc.EOF = True Then
Timer2.Enabled = False
Exit Sub
Else
mrc.MoveFirst
End If
'重中之重的关键是“定义卡号的数组”
'将所有上机卡号定义为一个数组
ReDim a(mrc.RecordCount) As String
For i = 0 To mrc.RecordCount - 1
a(i) = Trim(mrc!cardno)
cardno = a(i)
txtSQL = "select * from online_Info where cardno='" & Trim(cardno) & "'"
Set mrc1 = ExecuteSQL(txtSQL, msgtext)
txtSQL = "select * from student_Info where cardno='" & Trim(cardno) & "'"
Set mrc2 = ExecuteSQL(txtSQL, msgtext)
txtSQL = "select * from line_Info where status='" & "正常上机" & "' and cardno='" & Trim(cardno) & "'"
Set mrc3 = ExecuteSQL(txtSQL, msgtext)
'然后就是开始算钱了
'记录上机日期
ondate = Trim(mrc1.Fields(6))
ontime = Trim(mrc1.Fields(7))
'计算上机时间
valueDate = DateDiff("n", ondate, Date) '到目前的上机日期
valueTime = DateDiff("n", ontime, Time) '到目前的上机时间
valueTime = valueDate + valueTime
txtSQL = "select * from basicdata_info"
Set mrc4 = ExecuteSQL(txtSQL, msgtext)
'计算单位金额
If mrc2.Fields(14) = "固定用户" Then
pay = Format(mrc4.Fields(0) / 60, "0.0")
Else
pay = Format(mrc4.Fields(1) / 60, "0.0")
End If
'判断上机时间是否大于准备时间,计算消费金额
If valueTime >= 2 Then
valuetime1 = valueTime - (valueTime - 1)
pay = Format(pay * valuetime1, "0.0")
Else
pay = Format(pay * valueTime, "0.0")
End If
'更新student表的cash
mrc2.Fields(7) = mrc2.Fields(7) - pay
mrc2.Update
lblcash.Caption = mrc2.Fields(7)
'余额不足20元提示
If Val(mrc2.Fields(7)) > 0 And Val(mrc2.Fields(7)) < Val(mrc4.Fields(5)) Then
MsgBox a(i) & ",您卡内金额已不足" & Val(mrc4.Fields(5)) & "元,请尽快充值!", 48, "温馨提示"
' Exit Sub
End If
'判断是否余额为0,更新student,online表
If Val(mrc2.Fields(7)) <= 0 Then
mrc2.Fields(7) = 0
mrc2.Update
mrc1.Delete
mrc1.Update
MsgBox "卡号:" & a(i) & ",余额不足,即将下机!", 48, "警告"
'更新line表
mrc3.Fields(8) = Date
mrc3.Fields(9) = Time
mrc3.Fields(12) = mrc2.Fields(7)
mrc3.Fields(10) = valueTime
mrc3.Fields(11) = pay
mrc3.Update
End If
mrc.MoveNext
Next i
以上这一大步走的就是下机的一套流程,只是这套流程,放在了timer事件里,timer的interval 设置成60000,这样就是每一分钟记一次费,动态地完成了自动查询余额。
后记:
困难不可怕,迎难而上;逃避最可怕,勇敢面对
每次遇到问题都是逃避,等真正的大问题来了,解决起来就难上加难了,还是那句话,欠下的,迟早都要还,我想早点儿还,哈哈