您的位置:首页 > 其它

【机房收费系统】封装函数过程

2017-01-07 17:17 204 查看

前言:

机房验收的时候,王雷师父浏览我的代码,发现一个重复的功能,我都是很长的一段代码,于是,他示范了一下,怎样写一个函数过程来简化代码!

对比:

首先大家来看我的原始代码:

'只用第三行查询的情况
txtSQLc = "select * From worklog_Info where level='管理员' & " & FieldName(Namecombo3.Text) & FieldName(Actcombo3.Text) & "'" & Trim(Text3.Text) & "'"
Set mrcc = ExecuteSQL(txtSQLc, Msgtexta)
If mrcc.EOF Then
MsgBox "没有记录!", vbOKOnly + vbExclamation, "提示"
Exit Sub
End If

'判断是否移动到数据集对象的最后一条记录
Do While Not mrcc.EOF
.CellAlignment = 1
.TextMatrix(.Rows - 1, 0) = Trim(mrcc.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim(mrcc.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim(mrcc.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim(mrcc.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim(mrcc.Fields(4))
.TextMatrix(.Rows - 1, 5) = FieldName(IsNull(mrca.Fields(5)))
.TextMatrix(.Rows - 1, 6) = FieldName(IsNull(mrca.Fields(6)))
.TextMatrix(.Rows - 1, 7) = Trim(mrcc.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim(mrcc.Fields(8))
'移动到下一条记录
mrcc.MoveNext
.Rows = .Rows + 1 '预留空间给下一条记录
Loop
.Rows = .Rows - 1 '将最后增加的空行删除

Exit Sub
End If


它的作用是在表格控件中,相应位置上显示数据库中相应的内容,尽管都是实现这个功能,但是每个表格要显示的内容不同,来源的数据表不同,所以,我就不厌其烦的将这段功能代码在整个系统中重复了几十次。。。
而师父给我的示例呢:
'只用第三行查询的情况
txtSQLc = "select * From worklog_Info where " & FieldName(Namecombo3.Text) & FieldName(Actcombo3.Text) & "'" & Trim(Text3.Text) & "'"
Set mrcc = ExecuteSQL(txtSQLc, Msgtexta)
If mrcc.EOF Then
MsgBox "没有记录!", vbOKOnly + vbExclamation, "提示"
Exit Sub
End If
Call Show_table(mrcc)
Exit Sub
End If


超级简洁!
函数的思想就是把一个常用的功能封装起来,所有不同的地方,比如数据库列名,数据记录等,用参数表示。需要该功能时,直接调用一个函数加上参数就okay啦!简直就是以一敌百的效果啊!
step 1:声明函数,包括参数类型

Public Function Show_table(mrc1 As ADODB.Recordset)


step 2:利用参数将整个过程完整写下来
With MSFlexGrid
.Rows = 2
.Cols = 9
.ColWidth(0) = 1800
.ColWidth(3) = 1800
.ColWidth(4) = 1800
.ColWidth(5) = 1800
.ColWidth(6) = 1800
.ColWidth(7) = 1800
.TextMatrix(0, 0) = "序列号"
.TextMatrix(0, 1) = "教师"
.TextMatrix(0, 2) = "级别"
.TextMatrix(0, 3) = "注册时期"
.TextMatrix(0, 4) = "注册时间"
.TextMatrix(0, 5) = "注销日期"
.TextMatrix(0, 6) = "注销时间"
.TextMatrix(0, 7) = "机器名"
.TextMatrix(0, 8) = "状态"
'判断是否移动到数据集对象的最后一条记录
Do While Not mrc1.EOF
If IsNull(mrc1.Fields(5)) = True Then
mrc1.Fields(5) = ""
End If
If IsNull(mrc1.Fields(6)) = True Then
mrc1.Fields(6) = ""
End If
.CellAlignment = 1
.TextMatrix(.Rows - 1, 0) = Trim(mrc1.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim(mrc1.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim(mrc1.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim(mrc1.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim(mrc1.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim(mrc1.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim(mrc1.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim(mrc1.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim(mrc1.Fields(8))
'移动到下一条记录
mrc1.MoveNext
.Rows = .Rows + 1 '预留空间给下一条记录
Loop
.Rows = .Rows - 1 '将最后增加的空行删除
End With


step 3:编写结束函数过程语句

Exit Function
End Function


step 4:采用调用函数的方式,修改原来代码的相应功能部分

Call Show_table(mrcc)


step 5:run and debug
如此简单,一个函数就KO了我的啰嗦代码。。。

小结:

实现该功能时,想过调用函数,可是写了没两句就卡壳了,不知道要设计个什么类型的变量,反正繁冗的代码也能实现,于是就放弃了学习的机会。师父就是师父,不能让我得过且过,这样我又学会了一招,大家也找机会试试呗!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: