前言:
今天实现机房收费系统——一般用户——学生上机状态查看——选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统——上机状态查询之下机
过程:
要显示的表格式写查询,就会出来这样子
Private Sub 显示全部_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset '作为的连接online_info表查询的结果集
txtSQL = "select cardno,studentNo,ondate,OnTime,computer from OnLine_Info"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then
MsgBox "查询到0条记录", vbOKOnly + vbInformation, "提示!"
Else
With MSFlexGrid1
Do While mrc.EOF = False
.Rows = .Rows + 1
' .CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc!cardno
.TextMatrix(.Rows - 1, 1) = mrc!studentNo
.TextMatrix(.Rows - 1, 2) = mrc!ondate
.TextMatrix(.Rows - 1, 3) = mrc!OnTime
.TextMatrix(.Rows - 1, 4) = mrc!computer
.TextMatrix(.Rows - 1, 5) = ""
mrc.MoveNext
Loop
End With
End If
End Sub
接着我们可以看到它的
要想实现选中的下机,首先把选中的记录用一个符号√来标识这条记录!
这里定义了两个数组,分别来存储标识√的记录它的行号和学号。
i=0 有√标识的记录数目
for j=0 to .rows-1
if 符合√ then
记录行号到数组xh(s)
记录学号到数组sz(z)
i=i+1
end if
next j
'j是真实的表格中的行数,通过标识√筛选遍历一遍,将有√记录的信息记录并保留到数组中,并且将有记录的行数计算出了
for Z=0 to i-1 (0~i-1=i行,也就是由记录的i行)
通过数组引用一个个的学号,学号是主键,查询表得到记录集
mrc3 basicdate_info
mrc4 studeng_info
mrc1 online_info
mrc2 Line_info
Z=Z+1
next Z
'通过这样的一次遍历查询到数据库中的每一条记录
'因为选中的部分即将下机,引用这些记录的信息来进行结算帐目部分的计算!下机之前结账完毕!
'将选中的学生的数据进行更新,消费时间,消费金额,正常下机等等!修改包括student表和Line表
'最后从Online_info表中删除这些信息
接着,非常奇妙的部分就是如何实现部分
这段选择的代码真的是非常的巧妙,本意按下鼠标,选择要下机的学生;
前提是显示出来的信息都是没有选中的!在显示全部后所有的信息都是没有选中的状态!
在选的过程中:
按下鼠标之前,假设是没有选中的,按下后把它变为选中的状态;
按下鼠标之前,假设是选中的状态,按下后把它变为没有选中的状态;【二次按下鼠标就会需要这样的机制】
Private Sub msflexgrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'如何选中不连续的行
Dim col As Integer
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√" Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = ""
'改变行颜色(变为没选中之前的)
For col = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.col = col
MSFlexGrid1.CellBackColor = vbWhite
Next col
Else
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√"
'改变行颜色(选中后的颜色)
For col = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.col = col
MSFlexGrid1.CellBackColor = &HFFFF00
Next col
End If
这部分的代码是复制的,但我觉得写得非常巧妙!
总结:
1.分析代码,不会就一点一点测试
2.写代码而不是改代码,学习一招致命。
3.把问题复杂化其实是了避免直接面都那么难的问题,找到本质,就不难!
4.选择单行MSFlexGrid或是单元格
MouseColLong返回鼠标光标的列坐标位置
MouseRowLong返回鼠标光标的行坐标位置
选中某个单元
MsFlexGrid.Row=1
MsFlexGrid.Col=1
5. Dim sTokens() As String ‘定义名为sTokens字符串(数组)
Dim sTokens As string ‘定义名为sTokens字符串
6.trim:删除字串符的空格
Trim$:去掉字符串左右两端的空格