首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

机房收费——结合查询之逻辑结构

2012-10-05 
机房收费——组合查询之逻辑结构刚涉及做系统,对简单的查询还可以理清关系,在刚完成的机房收费系统中,组合查

机房收费——组合查询之逻辑结构

刚涉及做系统,对简单的查询还可以理清关系,在刚完成的机房收费系统中,组合查询可是着实让我思考了一番。

看一下组合查询窗体吧:

机房收费——结合查询之逻辑结构

 

在这个系统中,这样的组合查询窗体有4个。而涉及到的查询字段次数有26次,而我们每次查询都是只是用一个SQL语句。如果全部分情况,按字段,逐一写SQL语句的话,那就得写N条了。写的麻烦不用说,关键大部分都是重复的代码,没有多少价值。所以我们可以把这些重复的代码进行提取,整合。当然这里的逻辑结构很重要,提取不好的话,查询逻辑上就有错误了。

 

逻辑结构

机房收费——结合查询之逻辑结构

 

这里解释两个自定义函数。

第一个是字段判断函数FieldName:这里有字段的查询用到26次,但是其实只有14个字段。我们可以把字段的判断提取到一个函数中。在查询语句中只需调用字段判断函数值即可。

第二个是判断组合查询函数ComboInquire:这个函数依据组合框是否是空来判断是否组合查询。

 

查询特点:三个条件可以任意组合,不必一定是第一条和第二条组合,或者第一条,第二条,第三条组合;

在模板中定义了判断是否是组合查询的函数,和判断字段值的函数,其他窗体可以调用。

代码如下:

 

StrSql = "select * from Consumeinfo where "        '定义公共查询语句在先'判断各个文本框是否为空If TxtIsEmpty(comboField1.Text) Or TxtIsEmpty(comboOperator1.Text) Or TxtIsEmpty(txtFieldValue1.Text) Then    MsgBox "请把选项填完整再查询", vbOKOnly + vbCritical, "查询提示"    GoTo proc_exitElse    StrSql = StrSql & FieldName(comboField1.Text) & comboOperator1.Text & "'" & txtFieldValue1.Text & "'"End If'利用模版函数查看是否是组合查询If ComboInquire(comboCombo1.Text) Then'是组合查询    If TxtIsEmpty(comboField2.Text) Or TxtIsEmpty(comboOperator2.Text) Or TxtIsEmpty(txtFieldValue2.Text) Then        MsgBox "请把组合查询选项填完整再查询", vbOKOnly + vbCritical, "查询提示"        GoTo proc_exit    Else       Select Case comboCombo1.Text       Case "与"        StrSql = StrSql & " And " & FieldName(comboField2.Text) & comboOperator2.Text & "'" & txtFieldValue2.Text & "'"       Case "或"        StrSql = StrSql & " Or " & FieldName(comboField2.Text) & comboOperator2.Text & "'" & txtFieldValue2.Text & "'"        End Select    End IfEnd If'再次判断第三个条件,看是否是组合查询If ComboInquire(comboCombo2.Text) Then    '组合查询    If TxtIsEmpty(comboField3.Text) Or TxtIsEmpty(comboOperator3.Text) Or TxtIsEmpty(txtFieldValue3.Text) Then        MsgBox "请把组合查询选项填完整再查询", vbOKOnly + vbCritical, "查询提示"        GoTo proc_exit    Else        Select Case comboCombo2.Text        Case "与"        StrSql = StrSql & " And " & FieldName(comboField3.Text) & comboOperator3.Text & "'" & txtFieldValue3.Text & "'"        Case "或"        StrSql = StrSql & " Or " & FieldName(comboField3.Text) & comboOperator3.Text & "'" & txtFieldValue3.Text & "'"        End Select    End IfEnd If'开始进行查找Set objrs = ExecuteSQL(StrSql, StrMsg)objrs.UpdateIf objrs.RecordCount = 0 Then    MsgBox "没有您要查找的学生上机记录!", vbOKOnly + vbCritical, "查询提示"    comboField1.SetFocus    MSFlexGrid1.Rows = 1    GoTo proc_exit    '存在上机记录查询成功,填充到表格Else    Dim Intindex As Integer    MSFlexGrid1.Rows = 1    Do While Not objrs.EOF            With MSFlexGrid1        .Rows = .Rows + 1        .TextMatrix(.Rows - 1, 0) = Intindex + 1        .TextMatrix(.Rows - 1, 1) = objrs!CID        .TextMatrix(.Rows - 1, 2) = objrs!SName        .TextMatrix(.Rows - 1, 3) = objrs!OnDate        .TextMatrix(.Rows - 1, 4) = objrs!OnTime        .TextMatrix(.Rows - 1, 5) = objrs!OffDate        .TextMatrix(.Rows - 1, 6) = objrs!OffTime        .TextMatrix(.Rows - 1, 7) = objrs!Cash        .TextMatrix(.Rows - 1, 8) = objrs!Consumemoney            End With        Intindex = Intindex + 1        objrs.MoveNext    LoopEnd Ifproc_exit:    Set objrs = Nothing    Exit Sub’下面是模板函数***************************'定义组合查询的字段选择函数Public Function FieldName(StrFiledName As String) As StringSelect Case StrFiledName    Case "卡号"        FieldName = "CID"    Case "姓名"        FieldName = " SName"    Case "上机日期"        FieldName = "OnDate"    Case "上机时间"        FieldName = "OnTime"    Case "下机日期"        FieldName = "OffDate"    Case "下机时间"        FieldName = "OffTime"    Case "教师姓名"        FieldName = "TeacherName"    Case "级别"        FieldName = "TeacherType"    Case "性别"        FieldName = "Sex"    Case "机器名"        FieldName = "MachineName"    Case "专业"        FieldName = "Sdept"    Case "班级"        FieldName = "Sclass"    Case "年级"        FieldName = "Sgrade"    Case "学院"        FieldName = "SAccademy"    Case "学号"        FieldName = "SID"        End SelectEnd Function'定义函数:判断是否是组合查询Public Function ComboInquire(StrCombo As String) As BooleanIf StrCombo = "" Then    ComboInquire = FalseElse    ComboInquire = TrueEnd IfEnd Function


有好的建议,欢迎大家一起交流。

 

4楼lishehe4小时前
试试如果第一个和第三个选择的组合的话能行吗?
Re: wangyongxia9214小时前
回复lishehen在我这可以实现。
3楼sunliduan昨天 20:11
我也正在思考这个问题,学习啦!
Re: wangyongxia921昨天 20:12
回复sunliduann互相学习
2楼lfmilaoshi昨天 23:33
做了,就好。n米老师
Re: wangyongxia921昨天 16:30
回复lfmilaoshin这些东西理着理着就乱了,再理着理着就清了。
1楼lishehe昨天 22:59
还可以用数组来转换汉子与数据库的字段对应,前期加载的基本数据也本可以不这样加载;直接添加到控件的list与itemdata可以获取到的

热点排行