【Access小品】脱裤子放屁--代码修改完善方法示例
时 间:2012-10-19 11:32:58
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【Access小品】脱裤子放屁--代码修改完善方法示例
正 文:
yanghua1900363同志有一个程序运行上的错误,于是将一段代码贴了出来寻求答案。我看了一下,造成错误的原因倒不在这段代码中,问题应该出在代码所调用的一个函数上。不过这段代码有点意思,有点意思的原因是比较典型而常见的脱了裤子放屁。代码编写过程中,再熟练的程序员,都可能出现这个问题。因为人的思维是渐进的,不大可能一下把思路全部理清晰。但是不断的修改和完善代码的过程,是个好的习惯,这不仅在于能使代码本身变得简单易读。而且在于可以不断的积累编程的经验,掌握编程的规律。于是乎决定写此例,阐述代码修改完善的基本过程。
一、yanghua1900363同志的原代码:
Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
If IsNull(rst.Recordset("appraisalID")) Then
intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
If intmessage = vbYes Then
Call 订单评审
End If
Else
If Not IsNull(rst.Recordset("appraisalid")) Then
intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
If intmessage = vbYes Then
Call 订单评审
End If
End If
End If
End If
二、分析和改进代码的过程:
这段程序采用了if的多层嵌套结构,但这个嵌套多了些脱裤子放屁的意味,而且是脱几层裤子放屁。首先,IsNull(变量)与Not IsNull(变量)是互斥的,而if else end if已经表明了这种互斥关系的程序结构,于是放屁之前就多余穿了一件裤子。于是乎,程序应该简化为:
Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
If IsNull(rst.Recordset("appraisalID")) Then
intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
If intmessage = vbYes Then
Call 订单评审
End If
Else
intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
If intmessage = vbYes Then
Call 订单评审
End If
End If
End If
在剩余的代码中,if结构中的语句基本相同,这说明秋裤和内裤穿反了,因此把最里层的秋裤穿到外层来。程序应该简化为:
Dim intmessage As Integer
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
If IsNull(rst.Recordset("appraisalID")) Then
intmessage = MsgBox("该订单尚未评审,是否进行评审?", vbYesNo)
Else
intmessage = MsgBox("该订单已被评审,是否再次进行评审?", 4)
End If
If intmessage = vbYes Then
Call 订单评审
End If
End If
再仔细观察一下,if eles end if结构体中的语句,只是字符串的不一样,也就是内裤上绣的花不一样而已。于是程序简化为:
Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
If IsNull(rst.Recordset("appraisalID")) Then
str = "该订单尚未评审,是否进行评审?"
Else
str = "该订单已被评审,是否再次进行评审?"
End If
If MsgBox(str, vbYesNo) = vbYes Then
Call 订单评审
End If
End If
进一步观察字符串,发现第二句与第一句略有差别,也就是内裤上都绣了花,只是花型有点区别而已。于是程序简化为:
Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
str = "该订单尚未评审,是否进行评审?"
If IsNull(rst.Recordset("appraisalID"))=false Then
str = replace(replace(str,"尚未","已被"),"是否","是否再次")
End If
If MsgBox(str, vbYesNo) = vbYes Then
Call 订单评审
End If
End If
捣腾到此,如果还想进一步简化,就可以写成如下了:
Dim str As string
Dim rst As New 记录集封装程序
If rst.OpenRecordset("appraisal", "[销售订单id]=" & Me.销售订单id) Then
str = "该订单尚未评审,是否进行评审?"
If IsNull(rst.Recordset("appraisalID"))=false Then str = replace(replace(str,"尚未","已被"),"是否","是否再次")
If MsgBox(str, vbYesNo) = vbYes Then Call 订单评审
End If
简化后的语句与简化前相比减少了10句。基本上就是穿一条外裤一条内裤直接放个响屁就可以了。这屁放响了,便也就上下通气,心旷神怡,宠辱皆忘,把酒临风,其喜洋洋则已。
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)
- 统计当月之前(不含当月)的记录数怎...(03.11)