这两天实现了组合查询的基本功能,发现很多有意思的事儿。大家一起来看看是不是很有趣!
【趣味一】代码的复用
“多个不同的事件过程需要执行一段相同的程序代码,完成相同或相似的任务,为了避免程序代码的重复,也便于程序的修改,可以把这一段代码独立出来,作为一个过程,这样的过程称为通用过程,该过程独立于事件过程,可供事件过程和其他通用过程调用。”——此段话出自《VB程序设计》P168页,有兴趣的同学可以再次深入的研究一下。
实例一:窗体模块
</pre><pre name="code" class="vb"><span style="font-size:18px;">Public Function tianjia() '自定义函数,当查询成功后,调用此函数,显示数据库内容 Set mrc = ExecuteSQL(txtSQL, Msgtext) '在line表中查询记录 With myflexgrid '在grid控件中加载字段 .Rows = 1 .CellAlignment = 4 .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 mrc.EOF .Rows = .Rows + 1 '在grid控件中显示数据库数据 .CellAlignment = 4 .TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(1)) 'trim函数目的是使grid表格内容显示完整。 .TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(3)) .TextMatrix(.Rows - 1, 2) = Format(mrc.Fields(6), "yyyy-mm-dd") .TextMatrix(.Rows - 1, 3) = Format(mrc.Fields(7), "hh:mm:ss") .TextMatrix(.Rows - 1, 4) = Format(mrc.Fields(8), "yyyy-mm-dd") .TextMatrix(.Rows - 1, 5) = Format(mrc.Fields(9), "hh:mm:ss") .TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(11)) .TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(12)) .TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(13)) mrc.MoveNext '查询下一条记录 Loop mrc.Close '关闭数据库记录集 End With End Function </span>
实例二:标准模块
</pre><pre name="code" class="vb"><span style="font-size:18px;">Public Function Field(strfilename As String) As String '选项转化成数据库字段 Select Case strfilename Case "学号" Field = "studentNo" Case "姓名" Field = "studentName" Case "卡号" Field = "cardno" Case "系别" Field = "department" Case "年级" Field = "grade" Case "班级" Field = "class" Case "性别" Field = "sex" Case "与" Field = "and" Case "或" Field = "or" Case "状态" Field = "status" Case "备注" Field = "explain" Case "日期" Field = "date" Case "时间" Field = "time" Case "金额" Field = "cash" Case "类型" Field = "type" Case "教师" Field = "UserID" Case "注册日期" Field = "LoginDate" Case "注册时间" Field = "LoginTime" Case "注销时间" Field = "LogoutDate" Case "注销时间" Field = "LogoutTime" Case "机器名" Field = "computer" End Select End Function </span>在模块中写入以上代码,作用是每当组合查询的时候都要将combox选项字段转化为数据库中的字段名称,这样在查询语句的时候,字段作为条件就可以直接在数据库中查找数据了。模块的适用范围是将多个窗体中相同的过程,抽取出来并得到复用。并在所需要的窗体写一下查询语句中,实现调用。
<span style="font-size:18px;">txtSQL = txtSQL & Field(com01.Text) & com02.Text & "'" & txt03.Text & "'"</span>
【趣味二】流程图
在流程图的帮助,代码也就跟上了脚步。为什么这么说呢?每一步流程,代表的就是身后代码的支持。最后实现最后的功能,并且不至于一头雾水,我就在这里吃了亏,后来一直都停步不前,直到理清思路,代码问题也就迎刃而解了。那大家先来看一下我的流程图吧。
【趣味三】正常思维
实现了查询功能,可就是看着别扭,听了师父的建议,我才思考到了这一点,正常人的思维。
实例一:
首先,我们需要的只是第一行查询条件,二、三行都不可用。
查询第一行输入之后,判断组合关系是否为空,如果为空的话,直接出现查询结果;否则,提示“输入第二行查询内容”。
同理,判断第二个组合关系。
实例二:
性别只有男女,这样的话,只有 = 或 <> ,
<span style="font-size:18px;"> </span>
<span style="font-size:18px;">If Combo1.Text = "姓名" Or Combo1.Text = "性别" Then '如果是姓名或性别,操作符为<> = Combo2.Clear Combo2.AddItem "=" Combo2.AddItem "<>" Else '其他情况操作符为<, > , <>, = <span style="white-space:pre"> </span>Combo2.Clear Combo2.AddItem "=" Combo2.AddItem "<" Combo2.AddItem ">" Combo2.AddItem "<>" End If End Sub</span>想法很重要,用户需求很很重要,为人民服务的准则。
【趣味总结】
虽说是趣味,又何尝不是我们在做组合查询这一功能时,需要特别注意的啊。就像趣味一,就是一些课本知识的运用,所以,知识需要我们不断的重复,不断回顾,每次都会是新收获。以小见大,学习就是一个不断总结的过程,每学新知识都是不断重复旧知识。知识从何而来呢?实践出真知,趣味学习,乐学,我们要一点点的向着这一目标靠近。