【上机窗体】
1.设置label控件显示的背景色为透明:
(1)属性设置:BackStyle属性:
BackStyle = 0 '设置控件背景透明
BackStyle = 1 '设置控件背景不透明
(2)代码设置:与设置清空所有的文本框方法一样!
Dim ctl As Control '定义一个变量,把任何控件装载到里面
'把所有Label控件的背景属性都设置为0-transparent
For Each ctl In Me.Controls
If TypeOf ctl Is Label Then ctl.BackStyle = 0
Next ctl
End Sub
2.上机日期与下机日期的格式不统一:
如图:上机日期显示的格式为yyyy-mm–dd
下机日期显示的格式为:yyyy/mm/dd
查询代码发现:
上机日期显示的是online 表中的ondate,而下机日期显示的是电脑当前的时间,由于online表中的数据格式是yyyy-mm–dd,当前电脑时间的格式是yyyy/mm/dd,所以读取的数据格式不同。
解决方法:
使用关于时间的Format函数:用于制定字符串或数字的输出格式,根据格式表达式来格式化数据。
更多的关于format函数与时间设置问题请看小编博客:
https://blog.csdn.net/Ginny97/article/details/86667770
对于上机窗体,后续优化界面,将不需要输入的文本框Text换成Label控件,并且将其背景设置为透明,界面会更好看呦。
【选中学生下机】——循环检索处理
'定义变量和数组
Dim txtsql As String
Dim txtSQLStu As String
Dim msgtext As String
Dim mrcon As ADODB.Recordset
Dim mrcBa As ADODB.Recordset
Dim mrcline As ADODB.Recordset
Dim mrcStu As ADODB.Recordset
'目标存储
Dim sz(999) As String '定义数组作为容器,存储选中的卡号
Dim xh(999) As String '用来存储选中卡号的行号
'存储目标要用的存储
Dim z As Integer '存储目标行用的变量,与数据库联系
Dim j, i As Integer '表格的行列变量
Dim s As Integer '存储目标行号用到的变量,与表格联系
MyFlexGrid.SelectionMode = flexSelectionByRow '单击的时候选择的是整行
MyFlexGrid.FocusRect = flexFocusNone '在当前单元的周围画一个焦点框
MyFlexGrid.HighLight = flexHighlightWithFocus '该值决定了所选定的单元是否突出显示
'进行查询——标记:连接online表
txtsql = "select * from online_info"
Set mrcon = ExecuteSQL(txtsql, msgtext)
If mrcon.EOF = True Then
MsgBox "当前无人上机!", , "提示"
Else
'判断最后一列是否为*,若不是,该行未被选中
If MyFlexGrid.TextMatrix(MyFlexGrid.RowSel, 5) <> "*" Then
MsgBox "请先选择数据,再进行修改!", 0 + 48
Else
If MyFlexGrid.TextMatrix(MyFlexGrid.RowSel, 5) = "*" Then
With MyFlexGrid
'记录选中下机的卡号,将带有*的卡号和行号存入数组,上机卡号唯一,可以唯一标识
i = 0
For j = 1 To .Rows - 1
If .TextMatrix(j, 5) = "*" Then
sz(i) = .TextMatrix(j, 0) '存卡号
xh(i) = Val(j) '存行号
i = i + 1
End If
Next j
重点是把标记的所有行数据进行删除——查询条件为数组(sz(z))中记录的卡号,循环检索进行处理。
'删除、更新,通过z连接数据库进行循环检索处理
For z = 0 To i - 1 '从数组下标为0开始查询,查到 i-1 ,也就是第一个选中的卡号下标为0
txtsql = "select * from line_info where cardno='" & sz(z) & "'and status='正常上机'"
Set mrcline = ExecuteSQL(txtsql, msgtext)
'全部下机——计算时间,消费金额
'计算消费时间:
spendtime = DateDiff("n", mrcline!OnTime, Time) '当前时间-上机时间
spenddate = DateDiff("n", mrcline!ondate, Date) '当前日期-上机日期
spendalltime = Val(spendtime) + Val(spenddate) '总时间
'计算消费金额——先考虑上机的所有卡号是否都满足>准备时间,<=准备时间不收钱
txtsql = "select * from basicdata_info"
Set mrcBa = ExecuteSQL(txtsql, msgtext)
txtsql = "select * from online_info"
Set mrcon = ExecuteSQL(txtsql, msgtext)
If spendalltime <= Val(mrcBa.Fields(4)) Then
consume = "0" '消费金额为0
Else
If mrcon.Fields(1) = "固定用户" Then '消费金额计算 按分钟算
consume = Round(Val((spendalltime / mrcBa.Fields(2)) * mrcBa.Fields(0))) '消费金额=(消费时间/60分钟)* 每小时费用
'round函数:返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果
Else
consume = Round(Val((spendalltime / mrcBa.Fields(2)) * mrcBa.Fields(1))) '消费金额=(消费时间/60分钟)* 每小时费用
End If
End If
' 连接student表——计算余额
'txtSQLStu = "select * from student_info,online_info where student_info.cardno=online_info.cardno"
txtSQLStu = "select * from student_info where cardno='" & sz(z) & "'"
Set mrcStu = ExecuteSQL(txtSQLStu, msgtext)
mrcStu.Fields(7) = mrcStu.Fields(7) - consume '余额=当前余额-消费金额
mrcStu.Update
'更新line表
txtsql = "select * from line_info where cardno='" & sz(z) & "'and status='正常上机'"
Set mrcline = ExecuteSQL(txtsql, msgtext)
frmMain.cmddownline.Enabled = True
Do While mrcline.EOF = False
mrcline.Fields(8) = Date
mrcline.Fields(9) = Time
mrcline.Fields(13) = "正常下机"
mrcline.Fields(14) = VBA.Environ("computername")
mrcline.MoveNext
Loop
'更新online表
txtsql = "select * from online_info where cardno='" & sz(z) & "'"
Set mrcon = ExecuteSQL(txtsql, msgtext)
mrcon.Delete
Next z
'更新表格
For s = 0 To i - 1
.RemoveItem xh(s)
Next s