前言:
今天实现机房收费系统——一般用户——学生上机状态查看——选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统——上机状态查询之下机
过程:
要显示的表格式写查询,就会出来这样子
Private Sub 显示全部_Click()Dim txtSQL As StringDim MsgText As StringDim 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 ThenMsgBox "查询到0条记录", vbOKOnly + vbInformation, "提示!"ElseWith MSFlexGrid1Do 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.MoveNextLoopEnd WithEnd IfEnd Sub
接着我们可以看到它的
要想实现选中的下机,首先把选中的记录用一个符号√来标识这条记录!
这里定义了两个数组,分别来存储标识√的记录它的行号和学号。
i=0 有√标识的记录数目for j=0 to .rows-1if 符合√ then记录行号到数组xh(s)记录学号到数组sz(z)i=i+1end if next j'j是真实的表格中的行数,通过标识√筛选遍历一遍,将有√记录的信息记录并保留到数组中,并且将有记录的行数计算出了
for Z=0 to i-1 (0~i-1=i行,也就是由记录的i行)通过数组引用一个个的学号,学号是主键,查询表得到记录集mrc3 basicdate_infomrc4 studeng_infomrc1 online_infomrc2 Line_infoZ=Z+1next Z'通过这样的一次遍历查询到数据库中的每一条记录'因为选中的部分即将下机,引用这些记录的信息来进行结算帐目部分的计算!下机之前结账完毕!'将选中的学生的数据进行更新,消费时间,消费金额,正常下机等等!修改包括student表和Line表'最后从Online_info表中删除这些信息
接着,非常奇妙的部分就是如何实现部分
这段选择的代码真的是非常的巧妙,本意按下鼠标,选择要下机的学生;
前提是显示出来的信息都是没有选中的!在显示全部后所有的信息都是没有选中的状态!
在选的过程中:
按下鼠标之前,假设是没有选中的,按下后把它变为选中的状态;
按下鼠标之前,假设是选中的状态,按下后把它变为没有选中的状态;【二次按下鼠标就会需要这样的机制】
Private Sub msflexgrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)'如何选中不连续的行Dim col As IntegerIf MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√" ThenMSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = ""'改变行颜色(变为没选中之前的)For col = 0 To MSFlexGrid1.Cols - 1MSFlexGrid1.col = colMSFlexGrid1.CellBackColor = vbWhiteNext colElseMSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√"'改变行颜色(选中后的颜色)For col = 0 To MSFlexGrid1.Cols - 1MSFlexGrid1.col = colMSFlexGrid1.CellBackColor = &HFFFF00 Next colEnd 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$:去掉字符串左右两端的空格
如果觉得《机房收费系统【VB版】——选择下机》对你有帮助,请点赞、收藏,并留下你的观点哦!