前言:
第一次去验收机房的时候,师父问我说,上机的时候怎样才能保证学生不会因为上机时间太长而导致余额为负数呢但是我没有仔细想,但是后来师父告诉我可以实现一个实时判断余额的功能,于是我便着手做这个功能思路:计时器控件
思路:
- 利用timer控件
- 时间间隔为一分钟(Timer允许的最大时间间隔)
- 连接需要的表
- 将OnLine表与Student表连接起来
- 计算上机时间(与“下机”下同)
- 计算余额
- 进行循环
具体实施:
Private Sub Timer2_Timer()
Dim txtsql As String
Dim msgtext As String
Dim mrcOnL As ADODB.Recordset
Dim mrcStu As ADODB.Recordset
Dim mrcBas As ADODB.Recordset
Dim Balance As Integer
'将OnLine表与student表进行连接
txtsql = "select cash from student_Info,OnLine_Info where _
student_Info.cardno=OnLine_Info.cardno "
Set mrcStu = executeSQL(txtsql, msgtext)
'连接Online表
txtsql = "select * from OnLine_Info "
Set mrcOnL = executeSQL(txtsql, msgtext)
'连接Basic表
txtsql = "select * from BasicData_Info "
Set mrcBas = executeSQL(txtsql, msgtext)
'当OnLine表不为空时,进行计算与判断
Do While Not mrcOnL2.EOF
'计算上机时长
intlinetime = (Date - DateValue(mrcOnL2!ondate)) * 1440 _
+ (Hour(Time) - Hour(TimeValue(mrcOnL2!OnTime))) * 60 _
+ (Minute(Time) - Minute(TimeValue(mrcOnL2!OnTime)))
'计算余额
If Trim(mrcOnL.Fields(1)) = "临时用户" Then '若为临时用户,计算余额
Balance = Trim(mrcStu.Fields(0)) - (Int(intlinetime / 30) + 1) * _
(Trim(mrcBas.Fields(1)) / 2)
Else '若为固定用户,消费金额的计算
Balance = Trim(mrcStu.Fields(0)) - (Int(intlinetime / 30) + 1) * _
(Trim(mrcBas.Fields(0)) / 2)
End If
'进行判断
If Balance < Trim(mrcBas.Fields(5)) Then
txtCardNo.Text = mrcOnL.Fields(0)
MDIFrom.cmdOffLine = True
End If
mrcOnL.MoveNext
mrcStu.MoveNext
Loop
end sub
总结:在有思路之前我觉得要实现这个功能很难,而且是相当的难,但是自己真正去做了才发现原来也不是很难啊。
特别感谢:
感谢师父对我的指导,感谢伟杰同志的帮助,其实循环以及连接两个表是伟杰想出来的。