对于敲完机房收费系统的我们对于组合查询应该都不在陌生了吧。想想当时我在敲之前听别人说它比较麻烦的时候,我足足停了两天才开始对这部分下手。一下手就感觉我之前在学生信息管理系统里面见过啊(根据姓名、班级、年级查询学生信息),而且它也没有什么啊,其实就是我们平常做的查询啊,就是有时多了几个条件而已。
一、分析:
组合关系选择+组合关系约束
二、设计:
1、form load 加载:
Private Sub Form_Load() Dim i As Integer For i = 2 To 5 MSFlexGrid1.ColWidth(i) = 2500 Next i With MSFlexGrid1 .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) = "状态" End With cmbFieldA.AddItem "教师" cmbFieldA.AddItem "注册日期" cmbFieldA.AddItem "注册时间" cmbFieldA.AddItem "注销日期" cmbFieldA.AddItem "注销时间" cmbFieldA.AddItem "机器名" cmbFieldB.AddItem "教师" cmbFieldB.AddItem "注册日期" cmbFieldB.AddItem "注册时间" cmbFieldB.AddItem "注销日期" cmbFieldB.AddItem "注销时间" cmbFieldB.AddItem "机器名" cmbFieldC.AddItem "教师" cmbFieldC.AddItem "注册日期" cmbFieldC.AddItem "注册时间" cmbFieldC.AddItem "注销日期" cmbFieldC.AddItem "注销时间" cmbFieldC.AddItem "机器名" For i = 0 To 2 cmbOperator(i).AddItem "=" cmbOperator(i).AddItem "<>" cmbOperator(i).AddItem "<" cmbOperator(i).AddItem ">" Next i cmbCombination(0).AddItem "与" cmbCombination(0).AddItem "或" cmbCombination(1).AddItem "与" cmbCombination(1).AddItem "或" End Sub2、组合关系选择:
以选择两层关系为例:
'选两个组合,三层关系 If cmbFieldA.ListIndex = -1 Then '第一条查询输入内容(字段)为空 MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "提示" Exit Sub End If If cmbFieldB.ListIndex = -1 Then '第二条查询输入内容(字段)为空 MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "提示" Exit Sub End If If cmbFieldC.ListIndex = -1 Then '第三条查询输入内容(字段)为空 MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "提示" Exit Sub End If
’判断操作符和要查询的内容是否为空 For i = 0 To 2 If cmbOperator(i).ListIndex = -1 Then MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "提示" Exit Sub End If If txtInquire(i).Text = "" Then MsgBox "请输入要查询的内容!", vbOKOnly + vbExclamation, "提示" txtInquire(0).SetFocus Exit Sub End If Next i
'将组合框的内容转换为与数据库字段相对应的内容 strFieldA = GetStringA(cmbFieldA.Text) strFieldB = GetStringA(cmbFieldB.Text) strFieldC = GetStringA(cmbFieldC.Text) strOperatorA = Trim(cmbOperator(0).Text) strOperatorB = Trim(cmbOperator(1).Text) strOperatorC = Trim(cmbOperator(2).Text) strValueA = Trim(txtInquire(0).Text) strValueB = Trim(txtInquire(1).Text) strRelationA = GetStringB(cmbCombination(0).Text) strRelationB = GetStringB(cmbCombination(1).Text)
'根据条件查询 strSQL1 = "select * from worklog_Info where " strSQL1 = strSQL1 & strFieldA & strOperatorA & "'" & strValueA & "'" & " " & strRelationA & " " & strFieldB & strOperatorB & "'" & strValueB & "'" & " " & strRelationB & " " & strFieldC & strOperatorC & "'" & strValueC & "'" Set objRst1 = ExecuteSQL(strSQL1, strMsgText1) If objRst1.EOF Then MsgBox "没有相应的记录,您可以重新查询!", vbOKOnly + vbExclamation, "提示" cmbFieldA.ListIndex = -1 cmbFieldB.ListIndex = -1 cmbFieldC.ListIndex = -1 cmbOperator(0).ListIndex = -1 cmbOperator(1).ListIndex = -1 cmbOperator(2).ListIndex = -1 txtInquire(0).Text = "" txtInquire(1).Text = "" txtInquire(2).Text = "" cmbCombination(0).ListIndex = -1 cmbCombination(1).ListIndex = -1 cmbFieldB.Enabled = False cmbFieldC.Enabled = False cmbOperator(1).Enabled = False cmbOperator(2).Enabled = False txtInquire(1).Enabled = False txtInquire(2).Enabled = False cmbFieldA.SetFocus Exit Sub End If Do While Not objRst1.EOF With MSFlexGrid1 .CellAlignment = 4 .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = objRst1.Fields(1) .TextMatrix(.Rows - 1, 1) = objRst1.Fields(2) .TextMatrix(.Rows - 1, 2) = objRst1.Fields(3) .TextMatrix(.Rows - 1, 3) = objRst1.Fields(4)
'如果查询的内容数据中为空 If IsNull(objRst1.Fields(5).Value) Then .TextMatrix(.Rows - 1, 4) = "" Else .TextMatrix(.Rows - 1, 4) = objRst1.Fields(5) End If If IsNull(objRst1.Fields(6).Value) Then .TextMatrix(.Rows - 1, 5) = "" Else .TextMatrix(.Rows - 1, 5) = objRst1.Fields(6) End If If IsNull(objRst1.Fields(7).Value) Then .TextMatrix(.Rows - 1, 6) = "" Else .TextMatrix(.Rows - 1, 6) = objRst1.Fields(7) End If If IsNull(objRst1.Fields(8).Value) Then .TextMatrix(.Rows - 1, 7) = "" Else .TextMatrix(.Rows - 1, 7) = objRst1.Fields(8) End If .ColAlignment(-1) = 2 End With objRst1.MoveNext Loop Set objRst1 = Nothing End Sub
3、定义函数,使组合框中的内容与数据库中的相对应
Private Function GetStringA(strFieldName As String) As String Select Case strFieldName Case "教师" GetStringA = "UserID" Case "注册日期" GetStringA = "LoginDate" Case "注册时间" GetStringA = "LoginTime" Case "注销日期" GetStringA = "LogoutDate" Case "注销时间" GetStringA = "LogoutTime" Case "机器名" GetStringA = "computer" End Select End Function '定义一个函数将汉字的组合关系转化为计算机语言 Private Function GetStringB(strcombotext As String) As String Select Case strcombotext Case "或" GetStringB = "or" Case "与" GetStringB = "and" End Select End Function
四、总结
不要独立的去想一件事,每件事都不是孤立的,事务之间总是有联系的,运用生活中的和之前接触过的内容去解决我们现在遇到的东西,总会简化不少的。