用好已有的东西就是进步——重新认识right 函数
机房收费系统进行时,遇到了组合查询。先看一下界面:
在这里重点说的不是三个组合条件的逻辑结构,而是针对字段名的选择。大家都知道我们在查询结果集时 定义的SQL 语句是这样的:select * from tablename where fieldname =|>|< fieldvalue。
看一下这个语句:fieldname 是从图中字段名中选择的,这里有:卡号,姓名,上机日期,上机时间,下机日期,下机时间,消费金额,余额;而fieldvalue 从要查询的内容中选择。这里存在一个复合实际情况的对应关系:
即:当检索的字段是:卡号,消费金额,余额时 ,我们把它的检索值确定为数字,上机时间和下机时间的检索值确定为时间(hh:mm:ss),上机日期,下机日期的检索值确定为日期(yyyy-mm-dd),剩下的姓名定位else ,这样把字段进行一个分类以后,便于我们对用户各种各样的输入统一管理。当检索的字段为卡号时 ,我们就要检查一下查询内容是不是数字,如果是则开始查询,若不是,则提示用户输入数字,大大方便了我们的查询速度。随之就有了一个麻烦?我在选择这几个字段时,用到了select case ,可是这里有八个字段,难不成我要一个一个进行case ?像上机时间,下机时间,上机日期和下机日期这类,长得很像的词,我可不可以把他们归为一类,用一个case 语句,来限定所属类型是日期或者时间呢?
答案是可以的。这里就用到了大家很熟悉不过的right函数。
right函数的功能是从字符串右端取指定个数字符。 语法Right ( string, n ) 。
看代码:
Select Case Right(comboField1.Text, 2)'对字段输入进行限制 Case "日期" If Not IsDate(txtFieldValue1.Text) Then MsgBox "请输入正确的日期格式:yyyy-mm-dd。", vbOKOnly + vbCritical, "输入提示" txtFieldValue1.SetFocus txtFieldValue1SelStart = 0 txtFieldValue1.SelLength = Len(txtFieldValue1.Text) GoTo proc_exit Else txtFieldValue1.Text = Format(txtFieldValue1, "yyyy-mm-dd") End If Case "时间" If Not IsDate(txtFieldValue1.Text) Then MsgBox "请输入正确的日期格式:hh:mm:ss。", vbOKOnly + vbCritical, "输入提示" txtFieldValue1.SetFocus txtFieldValue1SelStart = 0 txtFieldValue1.SelLength = Len(txtFieldValue1.Text) GoTo proc_exit Else txtFieldValue1.Text = Format(txtFieldValue1, "hh:mm:ss") End If End Select
有这个函数,我们可以把属于时间的归为一类,属于日期的归为一类,原来的四个case语句,现在可以缩减到两个,大大节省了代码量,而且过程相对不那么的冗余了。现在我们是四个这样的语句,如果写出四个语句,你可能觉得还不是那么的费劲,可是要是将来有八个,十六个呢?是不是就真的是把大量的时间用到做重复的工作上了?这不是我们追求的。
有些东西不一定非要用到多么先进的语言,多么高深的技术才可以看出成就,其实我们周围有好多可以利用的资源,有的甚至都是基础,只是我们没有发现而已。我们还是习惯于知识就是知识,还没有做到把知识运用到实践中,学的新知识只是在说起来的时候知道是干什么的,而真正道理实践中,想到这个知识却费劲了。不追求有多高,一定要追求踏实。用好我们学过的就是在进步。
写到这想起一句话,要站在巨人的肩膀上看问题,要模仿巨人的做法。记得在敲学生信息管理系统的时候对一些结构还是有点小看法的,常常会自己问自己:为什么要这样写呢?有的甚至全程都没有用到?后来等自己开始做机房收费系统时 ,遇到了好多选择,判断,组合等情况,不同的是机房收费比学生信息系统在判断上稍微复杂点,我要是按照我最初单独想法来,想好半天代码,有时还是费力不讨好,在苦思中突然想到了信息系统中有过类似的情况,开始翻出原代码,开始了模仿,真的不一样,差距就在原来我纠结为什么人间要这么做,现在有点开始懵懂了。